This was going to be a top ten. But then it became impossible to keep to just that figure. Choosing 30 even required a bit of restraint.
In a year that it can be easy to assert nothing happened because of the pandemic, I was able to still find adventure. It is clear my thematic focus this year has been what is happening on the street, conflict, drone, art, and sometimes the mixing thereof.
The Wisconsin State Capitol Building is a central focus because this is my neighborhood. The building is located on a geographically unique natural feature for a state capitol in that it is on an isthmus. The square nestled in between two lakes has many moods.
The streets surrounding the Capitol Building, specifically State Street, offer a daily human carnival if you keep your eyes open. I use a Tamron 18-400mm lens to keep my distance in order to not be seen. It allows me to watch these tiny dramas unfold without disrupting their unrehearsed performances.
The unjust killing of George Floyd, Breonna Taylor, and other African-Americans sparked national protests. Madison traffic was frequently shut down as massive crowds marched for justice. Living across the street from the police station meant that sometimes, at all hours, the protests were literally on my doorstep.
Peaceful protests sometimes devolved into street violence. Early on the Wisconsin State Troopers clashed with protesters. One night the statues of representing Women’s suffrage and noted anti-slavery activist were torn down and dragged through the streets. I had the unfortunate experience of being tear gassed several times during the chaos. But I also got to meet the sweetest, kindest, and most generous people in this area. When I was hungry they fed me. When I was in pain they came to my aid. When I was in danger they protected me.
In stark contrast to the BLM protests were the anti-mask and election protests staged by Trump supporters. In principle they wanted the same thing, a better America. Where they starkly continue to differ is for whom; on the one side everyone regardless of race, color, orientation or creed and on the opposing side protection from “them” by returning to a time when America was great. I’ll let you infer which side brought guns to back up their arguments.
Even in these unprecedentedly dark times I found the time to work with a favored artistic brush, light. Long exposures require the cover of darkness to work in, and I feel most alive at night. Life on the isthmus isn’t always so kinetic, so it takes a bit of forethought to imagine how to these will look beforehand. The lights captured on the street are merely short snapshots of time. Put them together and they seem to come alive.
While the pandemic prevented me from wandering too far from home I was able to escape to South Dakota’s badlands. Traveling with me can be an exercise in frustration for those who like to plan, because I intentionally do very little research beforehand. Around every corner is adventure when you know little about what will come next. I am also a fan of the drama that inclement weather can provide.
The Red Sessions
On Thursday nights I host a live show on State Street where I can peacock. There are also various venues around Madison that cater to those who like to show off. But those things are shut down until further notice, so I decided to focus on documenting a select few of those outfits. A trio of them became known as “The Red Sessions.”
The last photo I have decided to highlight is merely a personal favorite.
Faced with ample time due to Covid-19 pandemic I decided to pick up a book that has long been in my vintage Apple collection. It is a 1981 version of Jef Raskin’s excellent The AppleSoft Tutorial, acquired by someone from Bay Port High School in Green Bay, Wisconsin. As a native of that city this manual survived several collection purges through the years.
The last time I picked it up was in 2009 for the Retro Computer Challenge. My only coding attempt in my adult life resulted in a program called FIRESHOW, which launched randomized fireworks. It was largely autonomous and has little actual interactivity. In the decade interim I had forgotten nearly everything I had learned about AppleSoft BASIC.
As I was killing time I followed the subroutine on page 85 that draws a horse. The results had me giggling, so I decided to see if I could add hooves. Then I wanted to see if I could get them moving. What if I moved the horse? From that point on I just kept on going.
Games of the 1980’s were often cruel in their level of difficulty. This was a function of extending playtimes in order to justify the cost. A $50 game in 1984 cost a lot more than a $50 game in 2020 when adjusted for inflation. I never enjoyed that aspect of of gaming while growing up in that decade. As an adult I also find that my upper limit for most gaming sessions is about 20 minutes. So I wanted to create something that would be forgiving and completed in a single short sitting. If you bet the minimum for each race you will still come out with a positive wallet balance in the end, but you may not make the Top Ten list where you can add your name. This also adds a little challenge element. You can compete against yourself or others who play the game with you.
I could have kept on going with the skills I have learned the past three months. Adding multiple players, custom horses, more robust statistic variables, and other neat features are well within my means. Perhaps in HORSE RACE II: THE HORSENING? For now I am content with what HORSE RACE is. A nice little game that is easy to play and 100% complete.
It was not an easy undertaking by any stretch. Even with the modern convenience of accurate Apple II emulation I still faced hurdles. Several times I coded for hours only to make a mistake in saving, which overwrote all my work. One bug that resulted in a memory leak took 16 days to solve with a single command. Those challenges, and meager computer specs, forced me to think of creative ways to solve the problems that arose.
One particular example of where an error led to a feature was the photo finish. Although a photo finish is normal for a real world horse race, the idea had not occurred to me. But a misplaced accumulator variable determining where to draw a horse on the screen resulted in it being drawn much farther to the right than it should have. When thinking about how to contain that misplaced variable, my photography skills provided influence. Contain the horses within a box, of which could be a polaroid photo finish. It is theme appropriate and has the benefit of being consistent with real world horse racing.
The experience also forced me to reach out to the Apple II Enthusiasts community to ask for help where appropriate. There are numerous well documented resources for anyone trying to do this. Some of the code in HORSE RACE is lifted directly from those sources, namely sound generation and file handling.
If you look at the code for HORSE RACE, it is clear that its structure arose organically as I was learning. It is a spaghetti dish of GOTO, GOSUB, and FOR/NEXT loops. But if you boot the 5.25″ floppy it performs just like a retail game.
As an aside, I find it extremely satisfying that Apple’s iCloud automatically backed up my progress snapshots. A current Apple product is supporting data for their computers from three decades earlier.
HELLO – AppleSoft
ProDOS formatted disks will automatically boot HELLO when the Apple II is turned on. HELLO contains the menu that informs the player of their options. They can start the game, read instructions, see the Top Ten list, reset the Top Ten list, see instructions for IIGS users, and a short section about me.
TRACK – AppleSoft
This is the initial file that I started programming. It is clear within lines 0 – 1000 based on the GOSUB and GOTO calls that I started with little regard to what exactly this program would contain.
The vast majority of the code handles the animation sequence from race start to race finish. A lot happens under the hood to make two little hooves move!
TITLE – AppleSoft
Pretty self explanatory.
This was split out into a separate file because I erroneously thought TRACK had eaten up too much RAM that was causing the game to crash consistently on race #3. It turned out not to be the case, but learning how to link AppleSoft files together became useful when I had to segment the expanding program.
The only other thing worth noting here is that title loads the machine code for tone generation before loading TRACK. This will reside in RAM for the duration of the game.
TOPTEN – AppleSoft
Shows the outcome of your betting. If you lose, it shows you one message. If you win it asks for your name to be added to the list. This was a huge challenge as the documentation to save and load text files was somewhat inconsistent online. In addition to that, the behavior of virtual and real world hardware treated the code with differing results. It took two weeks to make it work properly.
For some reason I could never get the modified name and score data to read or write properly when using a FOR/NEXT loop. So I did the most inefficient thing possible and typed out every adjustment line manually. If I didn’t mention it here you probably would never know that because it just works.
TOPTENVIEWER – AppleSoft
A variant of TOPTEN, sans name input or game over dialog. It took four attempts to get this because I kept overwriting it. Moral of the story: Don’t drink and code.
TOPTENRESET – AppleSoft
I created this as a development tool to reset the TOPNAMES, TOPSCORES, and SCORE text files when I was testing things. If a file got corrupted, or data needed to be cleared, it would go ahead and reset everything. I then realized there was a real world use case in the game in case someone entered an improper name.
TOPNAMES – Text File
This text file stores the ten names in the TOPTEN list.
TOPSCORES – Text File
This text file stores the ten scores in the TOPTEN list.
SCORE – Text File
This file transfers the wallet variable from TRACK to TOPTEN.
If you like the game I accept donations at Venmo: kenfager or Paypal: kenfager @ gmail.com.
The best experience is of course going to be on an actual Apple II computer. The game was tested on IIe (stock and enhanced), IIc, and IIGS hardware. However I am unaware of how the game will run on an original II or II+.