Compare commits

..

2 Commits

Author SHA1 Message Date
Lucia Ceionia
0785e7ccd0 day 18 part 2 2023-12-18 14:04:47 -06:00
Lucia Ceionia
5db47a3fcc day 18 part 1 2023-12-18 12:51:44 -06:00
7 changed files with 1420 additions and 0 deletions

6
18/Makefile Normal file
View File

@ -0,0 +1,6 @@
all:
nasm -g -felf64 main.s && ld -g main.o
part_1:
nasm -g -felf32 main_part1.s && ld -melf_i386 -g main_part1.o

784
18/input Normal file
View File

@ -0,0 +1,784 @@
R 7 (#43c232)
U 6 (#1f0fa3)
R 7 (#18f980)
D 3 (#1c5a83)
R 13 (#2a4010)
D 8 (#10ed73)
R 6 (#43c470)
D 9 (#2c1c51)
L 12 (#372130)
D 6 (#2c1c53)
L 7 (#0e8680)
D 6 (#3c7e13)
R 7 (#2f0660)
D 4 (#187de3)
R 6 (#6f1062)
D 8 (#3e68d3)
R 14 (#0b0972)
U 7 (#3b8553)
R 10 (#1bbcd2)
U 8 (#5aa601)
R 9 (#59c0b2)
U 3 (#5aa603)
L 14 (#0c14c2)
U 2 (#1b79e3)
L 4 (#322f62)
U 6 (#416201)
R 5 (#366202)
U 12 (#416203)
R 13 (#3fd0d2)
U 3 (#331943)
L 9 (#0c5f82)
U 3 (#2f0303)
R 9 (#6f6222)
U 9 (#4fd8a3)
L 11 (#15eaf0)
U 14 (#374c63)
R 11 (#0c26f0)
U 6 (#3f7353)
L 6 (#125130)
U 7 (#51dae3)
L 8 (#382b30)
D 8 (#51dae1)
L 5 (#3cd4c0)
D 6 (#1a2ea3)
L 11 (#251d90)
D 14 (#0842b3)
L 5 (#55c8c0)
U 3 (#58dea3)
L 8 (#0b7bb0)
U 11 (#5b3af3)
L 4 (#382100)
U 9 (#47fe13)
L 6 (#01b2e0)
U 5 (#4e82f3)
L 7 (#6e3740)
U 14 (#1cb493)
R 9 (#2c13e2)
U 9 (#206be3)
R 2 (#422362)
U 8 (#3bcfb3)
R 9 (#35b660)
U 7 (#37b1c3)
R 5 (#0d2980)
U 5 (#38fae3)
R 9 (#33e870)
U 10 (#403e11)
R 8 (#400260)
D 6 (#225021)
L 5 (#716760)
D 7 (#0e1e71)
R 5 (#287120)
D 9 (#5a71b1)
R 4 (#015c40)
U 10 (#6d0161)
R 6 (#06ed20)
D 8 (#602ca3)
R 7 (#3ddc50)
D 5 (#1adef3)
L 4 (#51eca0)
D 4 (#1adef1)
L 8 (#167b90)
U 4 (#3c7553)
L 5 (#3651e0)
D 7 (#0ce671)
R 17 (#26fae0)
D 5 (#0ce673)
L 7 (#2216b0)
D 5 (#1ac753)
R 13 (#2585f0)
U 10 (#05c323)
R 4 (#6a5190)
D 4 (#0c9913)
R 4 (#53e6e0)
D 10 (#239103)
L 4 (#1a0b82)
D 4 (#217593)
R 7 (#117862)
U 8 (#0efd13)
R 11 (#3b6432)
U 7 (#0efd11)
L 11 (#449482)
U 3 (#4b4ab3)
R 7 (#400530)
U 7 (#093f03)
L 16 (#516be0)
U 8 (#529313)
L 2 (#1a0b80)
U 5 (#49b4e3)
R 13 (#388aa0)
U 11 (#268b13)
R 3 (#3ed060)
U 10 (#525fd1)
R 7 (#2dee20)
U 14 (#525fd3)
R 4 (#1c7120)
U 4 (#4b5dc3)
R 6 (#071870)
U 3 (#16bc91)
R 6 (#0f7ea0)
D 4 (#3c3a83)
R 5 (#40a2f0)
U 4 (#3c3a81)
R 8 (#322d90)
D 2 (#16bc93)
R 7 (#1a45b0)
D 3 (#0dda01)
R 2 (#002990)
D 14 (#3ce0a1)
R 6 (#09b080)
D 2 (#3f3411)
R 6 (#712ba0)
U 4 (#18fc01)
R 4 (#50ae42)
U 14 (#394c81)
L 8 (#5992d2)
U 9 (#2c5181)
R 8 (#485892)
U 5 (#304b41)
L 6 (#671760)
U 11 (#3b2833)
L 10 (#349250)
U 10 (#3b2831)
L 9 (#1fea10)
U 6 (#5a4581)
L 8 (#3705e0)
D 7 (#2140a1)
L 6 (#3e1360)
U 7 (#51bce1)
L 7 (#61f190)
U 2 (#105a71)
L 6 (#2f41f0)
U 7 (#2eb5a1)
L 8 (#6a2b10)
U 3 (#103f93)
L 8 (#358c70)
U 5 (#103f91)
L 4 (#44e3e0)
U 12 (#2eb5a3)
L 11 (#1d4ef0)
U 9 (#621753)
L 4 (#0a1d50)
U 4 (#249d51)
R 4 (#287d90)
U 12 (#539513)
L 13 (#4e0190)
U 3 (#539511)
R 9 (#2ff870)
U 5 (#47b5b1)
R 7 (#385e80)
D 6 (#319f31)
R 5 (#247600)
D 7 (#0546b1)
R 16 (#4ee172)
D 4 (#163921)
L 16 (#006a42)
D 9 (#5c7f61)
R 6 (#4f4bb0)
D 2 (#09d9f1)
R 12 (#2da090)
U 3 (#38a4a3)
R 6 (#233670)
U 12 (#411713)
R 7 (#44f222)
U 13 (#5936f3)
R 9 (#0846c2)
D 5 (#2495a3)
R 8 (#4d38e0)
U 8 (#284313)
R 2 (#004360)
U 9 (#591641)
R 9 (#249b10)
U 15 (#5dbd81)
R 10 (#542730)
D 12 (#0658a1)
R 8 (#202200)
D 13 (#63e481)
R 7 (#417100)
D 11 (#115831)
R 3 (#1308a0)
D 8 (#5d7591)
R 4 (#5bbe90)
U 7 (#1dc0a3)
R 5 (#051c50)
U 17 (#510d23)
R 3 (#2322f0)
D 15 (#020aa3)
R 6 (#47ea42)
D 9 (#09f123)
R 7 (#130062)
D 12 (#1a0523)
L 6 (#4a2022)
D 4 (#473b73)
L 6 (#6dfee0)
D 4 (#24c393)
L 7 (#6dfee2)
U 4 (#2cbcb3)
L 6 (#137852)
U 4 (#57d193)
L 8 (#2c6570)
D 9 (#2c2113)
L 5 (#30de90)
D 8 (#298141)
L 10 (#286a40)
D 2 (#298143)
R 10 (#2c7790)
D 8 (#2c2111)
L 4 (#065d40)
D 11 (#0ded33)
R 14 (#5189c0)
U 11 (#125f21)
R 7 (#183960)
U 10 (#280071)
R 3 (#1fe640)
D 5 (#2c8b81)
R 7 (#504d70)
D 9 (#532921)
R 4 (#03e252)
D 7 (#169441)
R 7 (#3d6792)
D 14 (#278961)
L 4 (#472332)
D 9 (#2c4981)
R 8 (#2df3a0)
D 5 (#2ca501)
R 13 (#06f2d0)
D 3 (#479821)
L 10 (#06f2d2)
D 14 (#0916f1)
L 4 (#3a21d0)
D 6 (#342e23)
L 7 (#143d52)
D 10 (#3de0a3)
R 4 (#143d50)
D 7 (#0b4553)
R 6 (#3578d0)
D 4 (#454381)
R 8 (#12b310)
D 15 (#5c55a1)
R 3 (#400ad2)
D 15 (#708e81)
R 4 (#44a4e2)
D 3 (#195891)
R 11 (#40cec2)
D 14 (#0bf6f1)
R 9 (#3f7c42)
D 7 (#44f361)
L 14 (#252c20)
D 7 (#219561)
R 14 (#252c22)
D 5 (#3b93f1)
R 5 (#3f7c40)
D 4 (#1b4631)
R 7 (#5a10e2)
U 10 (#403fe3)
L 6 (#1c0942)
U 5 (#166bd3)
R 6 (#0dfeb2)
U 10 (#2faa13)
R 9 (#442662)
D 11 (#430413)
R 5 (#24e8f2)
D 10 (#254ae1)
L 5 (#698c32)
D 4 (#450431)
R 10 (#698c30)
U 8 (#19b101)
R 7 (#280ab2)
U 3 (#207b01)
R 8 (#1056d2)
U 4 (#0188c1)
R 9 (#566192)
U 8 (#153a81)
R 8 (#0ff8a2)
D 12 (#50b171)
R 10 (#0611d2)
D 11 (#168a11)
R 11 (#0ac2c0)
D 8 (#27c361)
L 5 (#49f630)
D 17 (#27c363)
R 5 (#2809e0)
D 12 (#08f281)
R 8 (#5d4ed0)
D 5 (#60c0b3)
R 3 (#1281e0)
U 4 (#4ee241)
R 7 (#627020)
U 7 (#4ee243)
R 8 (#4cdbc0)
U 7 (#60c0b1)
R 7 (#425e30)
D 6 (#059533)
R 4 (#259d90)
D 12 (#059531)
R 8 (#5398f0)
D 5 (#0f94a1)
R 6 (#1f6202)
U 6 (#118ec1)
R 7 (#584412)
D 6 (#633d01)
R 8 (#15f142)
D 8 (#30fcf1)
R 3 (#545932)
D 7 (#2e3d11)
L 3 (#0e4c62)
D 15 (#029c53)
L 6 (#1c5592)
D 3 (#3d4a43)
R 2 (#139220)
D 3 (#526013)
R 5 (#139222)
D 11 (#12bd03)
R 11 (#3955d2)
D 7 (#2f0223)
R 7 (#301b12)
D 5 (#0639e3)
R 12 (#2dbde2)
D 7 (#0639e1)
L 15 (#368152)
D 3 (#035551)
L 4 (#504f00)
D 12 (#4daf51)
R 7 (#09a6a0)
D 4 (#4ade31)
L 8 (#5b7570)
D 12 (#2a8671)
L 10 (#0291f0)
D 2 (#0f4cd1)
L 7 (#6f41f0)
D 16 (#4c29f1)
L 9 (#135550)
D 7 (#227161)
L 11 (#0e4ab2)
D 12 (#5b4aa1)
L 6 (#3d25f2)
D 6 (#5b4aa3)
L 7 (#40ef22)
D 4 (#3c2521)
L 9 (#018b52)
U 7 (#19e481)
L 5 (#47bbf2)
U 7 (#088601)
L 10 (#21bf60)
U 6 (#3c1c71)
L 6 (#21bf62)
U 7 (#3df0a1)
L 11 (#45d380)
U 7 (#23fff1)
R 10 (#455c50)
U 4 (#2d4481)
R 7 (#4a7730)
D 4 (#20be61)
R 10 (#032890)
U 10 (#66a6e3)
L 6 (#174410)
U 12 (#31a043)
L 5 (#302140)
U 12 (#5240c1)
L 8 (#43c1e0)
U 11 (#5240c3)
L 6 (#498ad0)
U 12 (#31a041)
L 4 (#0612a0)
U 4 (#4cc393)
L 2 (#416240)
U 6 (#3f9c83)
L 4 (#6624a2)
U 6 (#2f4df3)
L 11 (#233af2)
U 7 (#67d713)
L 8 (#219562)
D 4 (#191fd3)
L 11 (#425670)
D 7 (#2f9aa1)
L 9 (#5826b0)
D 5 (#2f9aa3)
L 9 (#02b510)
D 5 (#1eee93)
L 7 (#0dc2c0)
D 9 (#5e5973)
R 7 (#3a3e70)
D 5 (#1a55b3)
L 3 (#5bc130)
D 11 (#3c03a3)
L 7 (#2add40)
D 8 (#2fd5e3)
L 7 (#140162)
D 8 (#11daa3)
L 8 (#5d1932)
D 11 (#11daa1)
L 9 (#1583e2)
D 8 (#4b35b3)
L 9 (#742210)
D 2 (#2cb393)
L 13 (#275e80)
U 3 (#5989e1)
L 5 (#04e2c2)
U 11 (#2865a1)
R 5 (#04e2c0)
U 13 (#7c28f1)
R 5 (#338d60)
U 3 (#6cb1a1)
R 3 (#33f4c0)
U 4 (#19a1a1)
L 13 (#404cc0)
U 3 (#4671a1)
L 4 (#467420)
D 14 (#4e3051)
L 11 (#2653e2)
D 5 (#2d21d1)
L 4 (#3fe972)
D 9 (#2d21d3)
L 6 (#547852)
D 9 (#523421)
L 8 (#61db40)
D 17 (#093c71)
L 7 (#013960)
D 9 (#5341d1)
L 11 (#137f70)
D 12 (#1f9541)
L 2 (#43d170)
D 3 (#3756f1)
R 2 (#1460c0)
D 16 (#5f6ae1)
R 3 (#3d9e12)
D 13 (#0e0541)
R 10 (#290712)
D 7 (#244a91)
R 3 (#08f492)
U 14 (#50e851)
R 9 (#319750)
U 6 (#50cce1)
R 9 (#3e0260)
D 6 (#133501)
R 4 (#3e7640)
U 4 (#5b11d1)
R 13 (#18ca50)
U 9 (#1bde41)
R 8 (#2f7fe0)
U 10 (#1d8fa1)
R 3 (#013520)
U 3 (#4a1001)
R 3 (#005960)
U 9 (#41de93)
R 10 (#5ac660)
U 7 (#25c113)
R 3 (#4a0ae0)
D 3 (#57bd11)
R 14 (#186ec2)
D 11 (#363301)
L 14 (#6f3c92)
D 5 (#30d021)
R 10 (#0b4520)
D 4 (#37c321)
R 5 (#64e710)
D 6 (#37c323)
R 8 (#352280)
D 13 (#3e6021)
R 5 (#023060)
D 3 (#34b0e1)
L 9 (#1134f2)
D 4 (#5ef331)
L 9 (#1a4052)
D 3 (#274471)
R 3 (#333bd2)
D 8 (#1e38a3)
R 12 (#3462b2)
D 4 (#67ff03)
R 3 (#146b52)
D 7 (#224ba1)
R 10 (#099452)
D 9 (#076ef1)
R 9 (#406312)
D 2 (#54eda1)
R 10 (#0fae42)
D 9 (#74d4a1)
L 4 (#220d72)
D 8 (#0b6731)
L 15 (#314cb2)
D 3 (#2541f1)
L 9 (#061062)
D 8 (#65c091)
L 8 (#220c02)
D 13 (#0e5b01)
L 11 (#4f0f62)
D 10 (#469d91)
L 14 (#31c612)
U 8 (#406ec1)
L 16 (#382f52)
U 5 (#479c53)
L 13 (#548c72)
U 8 (#4005f3)
L 9 (#610822)
U 2 (#02cfd3)
L 9 (#0d4c22)
U 4 (#4f4793)
L 5 (#2291b2)
U 7 (#53adc3)
R 6 (#3a5872)
U 4 (#25eaf3)
R 9 (#3dc5e0)
D 4 (#4cf953)
R 8 (#1e7810)
U 6 (#2fec63)
L 4 (#0c79f0)
U 10 (#144493)
L 8 (#39b740)
U 10 (#144491)
L 6 (#3a0830)
U 7 (#2c4793)
L 5 (#4213d2)
D 10 (#4aa983)
L 4 (#24f902)
D 8 (#3f1823)
L 6 (#4802f2)
D 8 (#253191)
L 3 (#19c2c2)
D 6 (#2818e1)
L 7 (#19c2c0)
D 16 (#3c7731)
R 7 (#2d6792)
D 6 (#4ef903)
R 4 (#336e42)
D 4 (#238ec3)
L 4 (#4ac572)
D 9 (#5427a3)
L 9 (#053882)
D 8 (#6bf101)
L 2 (#42c482)
D 16 (#044bf1)
L 3 (#1461c2)
U 12 (#0502c1)
L 8 (#74a2e2)
U 11 (#0502c3)
L 4 (#3e7212)
D 4 (#2bd771)
L 13 (#141c02)
D 5 (#6061d1)
L 3 (#5ca8e2)
D 8 (#04a951)
R 9 (#2b1342)
D 9 (#671121)
L 9 (#33afb2)
D 8 (#1eb701)
L 12 (#4db550)
U 7 (#609eb1)
R 8 (#4db552)
U 15 (#10ae91)
L 8 (#2b2572)
U 8 (#25c4f1)
L 8 (#605e82)
U 4 (#09af31)
L 9 (#4328a2)
U 9 (#09af33)
L 17 (#21d142)
U 2 (#11e5f1)
R 17 (#263f50)
U 9 (#152301)
R 7 (#18b880)
U 8 (#014a31)
R 5 (#42b160)
U 14 (#17c201)
R 7 (#5d7500)
D 7 (#17c203)
R 10 (#23e090)
D 10 (#014a33)
R 12 (#0a5140)
U 14 (#152303)
R 3 (#55f650)
U 3 (#1c1ec1)
R 9 (#3aec42)
U 6 (#03e4b1)
R 3 (#45b7a2)
U 10 (#5ce301)
L 10 (#223d12)
U 13 (#2330d1)
L 13 (#74b632)
U 9 (#411551)
L 7 (#22caa2)
D 5 (#429fb1)
L 6 (#28e492)
D 14 (#4b6a41)
L 5 (#60a302)
D 3 (#05e403)
L 3 (#70cdf2)
U 9 (#05e4a1)
L 3 (#004a12)
U 11 (#6ebca1)
L 9 (#2f5d62)
U 4 (#51e5e3)
L 9 (#33ef12)
U 13 (#22bb63)
L 9 (#400e42)
U 6 (#4e0bc3)
L 10 (#2efb82)
U 11 (#320cc3)
L 5 (#3f8372)
U 3 (#529693)
L 9 (#305d52)
U 3 (#356f73)
L 5 (#068d72)
U 7 (#7321f1)
R 5 (#46e4b2)
U 4 (#7321f3)
R 5 (#32a3a2)
D 11 (#4b2fe3)
R 5 (#20bd80)
U 11 (#65e3a3)
R 8 (#3b3e40)
U 6 (#139783)
L 15 (#7a1050)
U 9 (#139781)
L 8 (#3ad500)
U 11 (#1fc253)
L 3 (#0e10f0)
U 9 (#580d53)
L 4 (#195782)
U 8 (#170a13)
L 7 (#1cc302)
U 2 (#4641b1)
L 6 (#4ec5c2)
U 10 (#492003)
L 11 (#43f2e2)
U 3 (#754983)
L 5 (#47df02)
U 6 (#754981)
L 9 (#0b6ed2)
U 5 (#492001)
R 9 (#0fb482)
U 8 (#6c73c1)
R 5 (#2d8f52)
U 3 (#23de61)
L 8 (#325f00)
D 3 (#53e8e1)
L 6 (#325f02)
D 3 (#3715c1)
L 4 (#433092)
D 14 (#40d3b1)
R 10 (#681512)
D 3 (#57d843)
L 7 (#1af362)
D 4 (#107e23)
L 6 (#545a32)
D 12 (#4e9023)
L 6 (#0ff9f2)
D 8 (#4b29b3)
L 3 (#484e52)
D 8 (#0a1063)
L 15 (#32d802)
D 7 (#5003e3)
L 4 (#213d02)
D 11 (#190461)
L 2 (#357f92)
D 6 (#6b8611)
L 10 (#3990e0)
D 5 (#077dd1)
L 4 (#426220)
D 11 (#6536c1)
L 8 (#18d540)
U 11 (#034201)
L 8 (#5b3762)
D 3 (#0fa911)
L 3 (#3990e2)
U 6 (#21be11)
L 14 (#59c742)
U 6 (#384881)
L 4 (#4ebc42)
U 8 (#5ed321)
L 4 (#4ebc40)
U 12 (#1a8f21)
L 3 (#504172)
U 5 (#042cd3)
L 11 (#3913b2)
U 4 (#77f953)
R 14 (#328612)
U 9 (#0d33d3)
R 3 (#20be92)
U 3 (#377b23)
R 10 (#20be90)
U 10 (#439383)
R 4 (#156e80)
U 14 (#12bf53)
R 5 (#562b40)
U 10 (#220b93)
L 5 (#1c3732)
U 3 (#46b0d3)
R 9 (#03f4c2)
U 9 (#165873)
L 9 (#12b652)
U 6 (#4737a3)
L 6 (#3bae72)
U 2 (#4ca8b3)
L 11 (#422bc2)
D 7 (#4ca8b1)
R 4 (#090d02)
D 9 (#406043)
R 9 (#091222)
D 6 (#2fd4c3)
L 7 (#0e6352)
D 3 (#42d653)
L 6 (#4aa522)
D 13 (#287113)
L 7 (#145852)
U 5 (#4a75c1)
L 7 (#640962)
U 15 (#4a75c3)
R 7 (#506322)
U 10 (#482373)
L 11 (#75df22)
U 8 (#369ab3)
L 8 (#75df20)
U 11 (#390283)
R 7 (#52b932)
U 4 (#508653)
R 5 (#46bbc0)
U 11 (#56d983)
R 6 (#64efe0)
U 10 (#1482b3)
R 7 (#3d20d0)
D 6 (#1dad03)
R 4 (#5fb9f0)
D 7 (#490903)
L 4 (#2c0010)
D 12 (#662ae3)
R 3 (#30a052)
U 8 (#64f5f3)
R 15 (#30a050)
U 5 (#650093)
R 12 (#5a5bd2)
U 4 (#2b5033)
R 3 (#3a86c2)
D 7 (#5d1e83)
R 7 (#218372)
D 11 (#0bc483)
R 7 (#0dcaf2)
U 3 (#2d2f93)
L 4 (#653610)
U 11 (#422573)
R 4 (#653612)
U 4 (#479223)
R 3 (#0dcaf0)
D 8 (#202b53)
R 10 (#4f8ea0)
D 3 (#210eb3)
R 14 (#4f8ea2)
D 9 (#3c44b3)
R 12 (#458112)
U 9 (#12cf91)
R 8 (#413da2)
U 11 (#036641)
R 5 (#4e1fe0)
D 4 (#465131)
R 12 (#01c8c0)
U 4 (#2aa881)
R 10 (#4fe8a2)
U 3 (#341941)
R 6 (#55c252)
U 13 (#339dc3)
R 5 (#449340)
U 7 (#566e43)
R 3 (#449342)
U 10 (#313cc3)
L 10 (#1e28f2)
U 9 (#09d973)

14
18/input_test Normal file
View File

@ -0,0 +1,14 @@
R 6 (#70c710)
D 5 (#0dc571)
L 2 (#5713f0)
D 2 (#d2c081)
R 2 (#59c680)
D 2 (#411b91)
L 5 (#8ceee2)
U 2 (#caa173)
L 1 (#1b58a2)
U 2 (#caa171)
R 2 (#7807d2)
U 3 (#a77fa3)
L 2 (#015232)
U 2 (#7a21e3)

65
18/main.s Normal file
View File

@ -0,0 +1,65 @@
%include "utils64.s"
global _start
[bits 64]
[section .text]
%define FILENAME "input"
;%define FILENAME "input_test"
_start:
mov rsi, file
mov rbp, 11_000_000_000 ; vert
mov rdi, 1 ; area
proc_line:
cmp rsi, file.over
jae .done
mov al, '#'
mov rcx, 32
xchg rdi, rsi
repne scasb
xchg rdi, rsi
call hex_parse
mov rbx, rax
and bl, 3
shr rax, 4
inc rsi ; \n
; process shit
cmp bl, 0
je .r
cmp bl, 1
je .d
cmp bl, 2
je .l
cmp bl, 3
je .u
.r:
add rdi, rax
mul rbp
add rdi, rax
jmp proc_line
.l:
mul rbp
sub rdi, rax
jmp proc_line
.d:
add rdi, rax
sub rbp, rax
jmp proc_line
.u:
add rbp, rax
jmp proc_line
.done:
hlt:
hlt ; go get a debugger, answer in rdi
jmp hlt
[section .data]
final_value: dq 0
file: incbin FILENAME
.over:
[section .bss]
[section .rodata]

149
18/main_part1.s Normal file
View File

@ -0,0 +1,149 @@
%include "utils.s"
global _start
[bits 32]
[section .text]
%define FILENAME "input"
;%define FILENAME "input_test"
;%define PRINT
_start:
mov esi, file
mov edi, array+1024*512+512 ; like, the middle idk
mov byte [edi], 1 ; filled!
proc_line:
cmp esi, file.over
jae .done
lodsb ; RDLU
%ifdef PRINT
call print_char
call space
%endif
mov ebx, eax
inc esi ; space
call dec_parse ; count
%ifdef PRINT
call print_dec
call newline
%endif
; skip to next line
add esi, 10
; put in array
cmp bl, 'R'
mov ecx, 1
cmove edx, ecx
cmp bl, 'L'
mov ecx, -1
cmove edx, ecx
cmp bl, 'D'
mov ecx, 1024
cmove edx, ecx
cmp bl, 'U'
mov ecx, -1024
cmove edx, ecx
mov ecx, eax
.draw:
add edi, edx
mov byte [edi], 1
loop .draw
jmp proc_line
.done:
%ifdef PRINT
print_array:
call newline
mov esi, array
xor ecx, ecx
.inner:
mov bl, '.'
lodsb
test al, al
mov dl, '#'
cmovnz bx, dx
mov al, bl
call print_char
inc ecx
cmp ecx, 1024*1024
jae .done
mov ebx, ecx
and ebx, 1023
jnz .inner
call newline
jmp .inner
.done:
call newline
%endif
xor ecx, ecx ; x = 0
xor ebx, ebx ; y = 0
mov ebp, 1024*1024 ; count
call flood_fill
jmp flood_done
flood_fill:
mov eax, ebx
shl eax, 10
cmp byte [array+eax+ecx], 0
je .zero
ret
.zero:
dec ebp
mov byte [array+eax+ecx], 1
sub esp, 8
mov [esp+4], ecx
mov [esp+0], ebx
.t_right:
cmp ecx, 1023
je .t_left
inc ecx
call flood_fill
mov ecx, [esp+4]
.t_left:
cmp ecx, 0
je .t_down
dec ecx
call flood_fill
mov ecx, [esp+4]
.t_down:
cmp ebx, 1023
je .t_up
inc ebx
call flood_fill
mov ebx, [esp+0]
.t_up:
cmp ebx, 0
je .ret
dec ebx
call flood_fill
mov ebx, [esp+0]
.ret:
add esp, 8
ret
flood_done:
mov [final_value], ebp
game_over:
mov eax, [final_value]
call print_dec
call newline
jmp exit
PANIC:
p_string panic_str
jmp exit
[section .data]
final_value: dd 0
file: incbin FILENAME
.over:
[section .bss]
array: resb 1024*1024
[section .rodata]
panic_str: db 10, "AAAAAAAAAAAAAAAAAAAAAA!!!!!!!!!!11111111", 10
.over:

285
18/utils.s Normal file
View File

@ -0,0 +1,285 @@
[bits 32]
[section .text]
; call # val val2
; int $0x80 eax eax edx -
;
; arg1 arg2 arg3 arg4 arg5 arg6 arg7
; ebx ecx edx esi edi ebp -
exit:
mov eax, 1 ; exit
int 0x80
; filename in EBX
; return handle in EBX
; read only
open_file:
push eax
push ecx
mov eax, 5 ; open
xor ecx, ecx ; read only
int 0x80
mov ebx, eax
pop ecx
pop eax
ret
; file handle in EBX
; buffer in ECX
; count of bytes to read in EDX
; return bytes actually read in EAX
; exits on error
read_file:
mov eax, 3 ; read
int 0x80
test eax, eax
js .err
ret
.err:
mov eax, 4 ; write
mov ebx, 1 ; stdout
mov ecx, .err_str
mov edx, 21
int 0x80
jmp exit
.err_str: db `Could not read file.\n`
; string input in ESI
; value in EAX
; CF set if none, clear if some
; ESI set past checked area
dec_parse:
push ebx
push edx
push edi
xor eax, eax
xor edi, edi
mov ebx, 10 ; base
lodsb
sub al, '0'
js .no_input
cmp al, 9
jle .got_char
.no_input:
stc ; set CF
jmp .done
.loop:
xor eax,eax
lodsb
sub al, '0'
js .dec_done
cmp al, 9
jg .dec_done
.got_char:
xchg edi,eax
mul ebx
add edi,eax
jmp .loop
.dec_done:
clc ; clear CF
.done:
mov eax,edi
pop edi
pop edx
pop ebx
ret
; string input in ESI
; value in EAX
; CF set if none, clear if some
; ESI set past checked area
sign_dec_parse:
push ebx
push ecx
push edx
push edi
xor eax, eax
xor edi, edi
xor ecx, ecx ; neg flag
mov ebx, 10 ; base
cmp byte [esi], '-'
jne .no_minus
inc esi
mov cl, 1
.no_minus:
lodsb
sub al, '0'
js .no_input
cmp al, 9
jle .got_char
.no_input:
stc ; set CF
jmp .done
.loop:
xor eax,eax
lodsb
sub al, '0'
js .dec_done
cmp al, 9
jg .dec_done
.got_char:
xchg edi,eax
mul ebx
add edi,eax
jmp .loop
.dec_done:
test ecx, ecx
jz .not_neg
neg edi
.not_neg:
clc ; clear CF
.done:
mov eax,edi
pop edi
pop edx
pop ecx
pop ebx
ret
; modifies no regs
newline:
pushad
push 10
mov eax, 4 ; write
mov ebx, 1 ; stdout
mov ecx, esp ; string
mov edx, 1 ; length
int 0x80
add esp, 4
popad
ret
; modifies no regs
space:
pushad
push 9
mov eax, 4 ; write
mov ebx, 1 ; stdout
mov ecx, esp ; string
mov edx, 1 ; length
int 0x80
add esp, 4
popad
ret
; input in EAX, all regs unmodified
print_dec:
pushad ; save regs
; max 4294967296 is 10 chars
; round to nearest 32-bit boundary
sub esp, 12
; string in ECX, length in EDX
lea ecx, [esp+11] ; last possible byte
; check for 0
test eax, eax
jz .zero
mov ebx, 10 ; base 10
xor esi, esi ; counter
.div_shit:
xor edx, edx
; divide
div ebx
dec ecx ; next char
inc esi
; store
add dl, '0'
mov byte [ecx], dl
; check if done
test eax, eax
jnz .div_shit ; continue
mov edx, esi ; counter in edx
jmp .write
.zero:
mov byte [ecx], '0'
mov edx, 1 ; length
.write:
mov eax, 4 ; write
mov ebx, 1 ; stdout
int 0x80
add esp, 12 ; restore stack
popad ; restore regs
ret
; input in EAX, all regs unmodified
print_sign_dec:
pushad ; save regs
; range -2147483648 to 2147483647 is 11 chars
; round to nearest 32-bit boundary
sub esp, 12
; string in ECX, length in EDX
lea ecx, [esp+11] ; last possible byte
; check for 0, negative
xor ebp, ebp
test eax, eax
jz .zero
jns .positive
neg eax
mov ebp, 1
.positive:
mov ebx, 10 ; base 10
xor esi, esi ; counter
.div_shit:
xor edx, edx
; divide
div ebx
dec ecx ; next char
inc esi
; store
add dl, '0'
mov byte [ecx], dl
; check if done
test eax, eax
jnz .div_shit ; continue
mov edx, esi ; counter in edx
jmp .write
.zero:
mov byte [ecx], '0'
mov edx, 1 ; length
.write:
test ebp, ebp
jz .no_minus
dec ecx
inc edx
mov byte [ecx], '-'
.no_minus:
mov eax, 4 ; write
mov ebx, 1 ; stdout
int 0x80
add esp, 12 ; restore stack
popad ; restore regs
ret
; input in ESI, len in ECX, all regs unmodified
print_string:
pushad ; save regs
mov eax, 4 ; write
mov ebx, 1 ; stdout
mov edx, ecx ; length
mov ecx, esi ; string
int 0x80
popad ; restore regs
ret
; input in AL, all regs unmodified
print_char:
pushad ; save regs
push eax
mov eax, 4 ; write
mov ebx, 1 ; stdout
mov edx, 1 ; length
mov ecx, esp ; string
int 0x80
add esp, 4
popad ; restore regs
ret
; --- MACROS ---
%define len(x) x %+ .over - x
%macro p_string 1
push esi
push ecx
mov esi, %1
mov ecx, len(%1)
call print_string
pop ecx
pop esi
%endmacro

117
18/utils64.s Normal file
View File

@ -0,0 +1,117 @@
[bits 64]
[section .text]
; string input in RSI
; value in RAX
; CF set if none, clear if some
; RSI set past checked area
dec_parse:
sub rsp, 24
mov [rsp+16], rbx
mov [rsp+8], rdx
mov [rsp+0], rdi
xor rax, rax
xor rdi, rdi
mov rbx, 10 ; base
lodsb
sub al, '0'
js .no_input
cmp al, 9
jle .got_char
.no_input:
stc ; set CF
jmp .done
.loop:
xor rax,rax
lodsb
sub al, '0'
js .dec_done
cmp al, 9
jg .dec_done
.got_char:
xchg rdi,rax
mul rbx
add rdi,rax
jmp .loop
.dec_done:
clc ; clear CF
.done:
mov rax, rdi
mov rdi, [rsp+0]
mov rdx, [rsp+8]
mov rbx, [rsp+16]
add rsp, 24
ret
; string input in RSI
; value in RAX
; CF set if none, cear if some
; RSI set past checked area
hex_parse:
sub rsp, 24
mov [rsp+16], rbx
mov [rsp+8], rdx
mov [rsp+0], rdi
xor rax, rax
xor rdi, rdi
lodsb
cmp al, '0'
jb .no_input
cmp al, '9'
jbe .got_dec_char
cmp al, 'A'
jb .no_input
cmp al, 'F'
jbe .got_ualpha_char
cmp al, 'a'
jb .no_input
cmp al, 'f'
jbe .got_ualpha_char
.no_input:
stc ; set CF
jmp .done
.loop:
xor rax,rax
lodsb
cmp al, '0'
jb .hex_done
cmp al, '9'
jbe .got_dec_char
cmp al, 'A'
jb .hex_done
cmp al, 'F'
jbe .got_ualpha_char
cmp al, 'a'
jb .hex_done
cmp al, 'f'
jbe .got_ualpha_char
jmp .hex_done
.got_dec_char:
sub al, '0'
xchg rdi,rax
shl rax, 4
add rdi,rax
jmp .loop
.got_alpha_char:
sub al, 'A'-10
xchg rdi,rax
shl rax, 4
add rdi,rax
jmp .loop
.got_ualpha_char:
sub al, 'a'-10
xchg rdi,rax
shl rax, 4
add rdi,rax
jmp .loop
.hex_done:
clc ; clear CF
.done:
mov rax, rdi
mov rdi, [rsp+0]
mov rdx, [rsp+8]
mov rbx, [rsp+16]
add rsp, 24
ret
; --- MACROS ---
%define len(x) x %+ .over - x