<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>http://channelf.se/veswiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=83.233.129.35</id>
		<title>veswiki - User contributions [en]</title>
		<link rel="self" type="application/atom+xml" href="http://channelf.se/veswiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=83.233.129.35"/>
		<link rel="alternate" type="text/html" href="http://channelf.se/veswiki/index.php?title=Special:Contributions/83.233.129.35"/>
		<updated>2026-05-14T00:08:08Z</updated>
		<subtitle>User contributions</subtitle>
		<generator>MediaWiki 1.28.0</generator>

	<entry>
		<id>http://channelf.se/veswiki/index.php?title=Reading_Controllers&amp;diff=114</id>
		<title>Reading Controllers</title>
		<link rel="alternate" type="text/html" href="http://channelf.se/veswiki/index.php?title=Reading_Controllers&amp;diff=114"/>
				<updated>2007-08-14T21:54:43Z</updated>
		
		<summary type="html">&lt;p&gt;83.233.129.35: /* Conclusion */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Wait for controller movement ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The simplest use of hand controller is to just pause and wait for a movement, this subroutine does just that, you call it with:&lt;br /&gt;
&lt;br /&gt;
pi	wait.4.controller.input&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
; program&lt;br /&gt;
&lt;br /&gt;
; wait for controller movement&lt;br /&gt;
&lt;br /&gt;
pi	wait.4.controller.input&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
; either hand control has been moved in some direction&lt;br /&gt;
&lt;br /&gt;
; program continues....&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
wait.4.controller.input:&lt;br /&gt;
	; see if one of the hand controllers has moved&lt;br /&gt;
	clr&lt;br /&gt;
	outs	0&lt;br /&gt;
	outs	1						; check right hand controller&lt;br /&gt;
	ins	1&lt;br /&gt;
	com							; re-invert controller data&lt;br /&gt;
	bnz	wait.4.controller.input.end			; if no movement then input is 0 -&amp;gt; no branch&lt;br /&gt;
	; check the other controller&lt;br /&gt;
	clr&lt;br /&gt;
	outs	4						; check left hand controller&lt;br /&gt;
	ins	4&lt;br /&gt;
	com&lt;br /&gt;
	bnz	wait.4.controller.input.end&lt;br /&gt;
	br	wait.4.controller.input				; re-test until we have some movement&lt;br /&gt;
&lt;br /&gt;
wait.4.controller.input.end:&lt;br /&gt;
&lt;br /&gt;
	pop&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Controller directions in the register ==&lt;br /&gt;
&lt;br /&gt;
After the hand controller data has been read it needs to be inverted since it is inverted when read - we do that to get the real data back.&lt;br /&gt;
The 8 bits is stored in Ackumulator (A) and the bits mean this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
        direction&lt;br /&gt;
bit  0  right&lt;br /&gt;
bit  1  left&lt;br /&gt;
bit  2  backward&lt;br /&gt;
bit  3  forward&lt;br /&gt;
bit  4  counterclockwise&lt;br /&gt;
bit  5  clockwise&lt;br /&gt;
bit  6  pull up&lt;br /&gt;
bit  7  push down&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So if we get the value %10000000 that means the hand controller read is being pushed down.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Port-data&lt;br /&gt;
%00000001  right&lt;br /&gt;
%00000010  left&lt;br /&gt;
%00000100  backward&lt;br /&gt;
%00001000  forward&lt;br /&gt;
%00010000  counterclockwise&lt;br /&gt;
%00100000  clockwise&lt;br /&gt;
%01000000  pull up&lt;br /&gt;
%10000000  push down&lt;br /&gt;
&lt;br /&gt;
Combinations are of course possible to:&lt;br /&gt;
&lt;br /&gt;
%10000010  push down + left&lt;br /&gt;
&lt;br /&gt;
And there are combinations that are impossible, since they are opposite directions:&lt;br /&gt;
&lt;br /&gt;
%11000000  push down + pull up&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After reading the controller/s you can store the result in a register to use later or check directly which direction was chosen. Let's suppose you have a game where you can move forward, backward, right or left with the right hand controller. If we store the result of the controller in let say register 8, this is how to do it:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Store result for later use ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
store.right.controller.input:&lt;br /&gt;
	&lt;br /&gt;
	clr&lt;br /&gt;
	outs	0&lt;br /&gt;
	outs	1						; check right hand controller&lt;br /&gt;
	ins	1&lt;br /&gt;
	com							; re-invert controller data&lt;br /&gt;
	lr	8, A						; store result in register 8&lt;br /&gt;
&lt;br /&gt;
store.right.controller.input.end:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Later in the program we can load the movement and mask away the directions we're interested in.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	; 	program program&lt;br /&gt;
	; 	...&lt;br /&gt;
	&lt;br /&gt;
	lr	A, 8						; copy register 8 to Ackumulator&lt;br /&gt;
	ni	%00001111					; AND result and only keep the last nibble&lt;br /&gt;
	lr	8, A						; back up result in r8 again&lt;br /&gt;
&lt;br /&gt;
	;	...&lt;br /&gt;
	;	program continues&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We now have one of these bitpatterns in r8:&lt;br /&gt;
&lt;br /&gt;
%00000000	no movement&lt;br /&gt;
%00000001	right&lt;br /&gt;
%00000010	left&lt;br /&gt;
%00000100	backward&lt;br /&gt;
%00000101	backward + right&lt;br /&gt;
%00000110	backward + left&lt;br /&gt;
%00001000	forward&lt;br /&gt;
%00001001	forward + right&lt;br /&gt;
%00001010	forward + left&lt;br /&gt;
&lt;br /&gt;
Nothing else is possible unless something is broken.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Reading the four console buttons ==&lt;br /&gt;
&lt;br /&gt;
This code reads the buttons, you can then mask this result similar to the hand controller:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	; read buttons&lt;br /&gt;
	ins	0				; get input from port 0&lt;br /&gt;
	com					; invert &lt;br /&gt;
	lr	4, A				; store button result in register 4&lt;br /&gt;
	li	128				; load timer value for debounce&lt;br /&gt;
	lr	5, A				; in register 5&lt;br /&gt;
debounce: 			; this is a delay to wait until button contacts stops bouncing&lt;br /&gt;
	ds	5				&lt;br /&gt;
	bnz	debounce			; decrease r5 until zero&lt;br /&gt;
	lr	A, 4				; load button result into Ackumulator again&lt;br /&gt;
	ni	%00000010			; mask out button #2&lt;br /&gt;
	bnz	main.buttons.used.two		; not zero means button 2 was pressed&lt;br /&gt;
	lr	A, 4				; load read result into A again&lt;br /&gt;
	ni	%00000001			; check if it was button #1&lt;br /&gt;
	bnz	main.buttons.used.one		; if that's not 0 it means button 1 was held&lt;br /&gt;
&lt;br /&gt;
	br	main.continue			; continue program&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The intelligent reader has already figured out the rest of the inputs available:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
%00000001  button 1&lt;br /&gt;
%00000010  button 2&lt;br /&gt;
%00000011&lt;br /&gt;
%00000100  button 3&lt;br /&gt;
%00000101&lt;br /&gt;
%00000110&lt;br /&gt;
%00000111&lt;br /&gt;
%00001000  button 4&lt;br /&gt;
%00001001&lt;br /&gt;
%00001010&lt;br /&gt;
%00001011&lt;br /&gt;
%00001100  button 4 + 3&lt;br /&gt;
%00001101&lt;br /&gt;
%00001110&lt;br /&gt;
%00001111   all buttons pressed&lt;br /&gt;
&lt;br /&gt;
Combinations are pretty clear.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
Read right hand controller this way:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	clr&lt;br /&gt;
	outs	0&lt;br /&gt;
	outs	1&lt;br /&gt;
	ins	1&lt;br /&gt;
	com		&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Read left hand controller this way:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	clr&lt;br /&gt;
	outs	4&lt;br /&gt;
	ins	4&lt;br /&gt;
	com&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Read buttons with:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	ins	0&lt;br /&gt;
	com&lt;br /&gt;
&lt;br /&gt;
	; you may need to debounce as described above&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''And you have the result in A'''&lt;/div&gt;</summary>
		<author><name>83.233.129.35</name></author>	</entry>

	<entry>
		<id>http://channelf.se/veswiki/index.php?title=Outputting_Sound&amp;diff=108</id>
		<title>Outputting Sound</title>
		<link rel="alternate" type="text/html" href="http://channelf.se/veswiki/index.php?title=Outputting_Sound&amp;diff=108"/>
				<updated>2007-08-14T21:52:13Z</updated>
		
		<summary type="html">&lt;p&gt;83.233.129.35: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;You can originally make 3 sounds- a 500Hz beep, a 1KHz beep or a 120Hz beep.&lt;br /&gt;
&lt;br /&gt;
Coming up are recordings of various sounds mentioned.&lt;br /&gt;
&lt;br /&gt;
If you want to make any other sounds try the improved [[Snippet:Playsong|PlaySong]] subroutine, this however sounds like a broken speaker on the early systems. System II has improved support for this and also sound on the tv (you can lower the volume).&lt;br /&gt;
In VES [[Homebrew:Pac-Man|Pac-man]] the &amp;quot;Pac-man theme&amp;quot; is played before start and the PlaySong routine is also used for the other soundeffects. &lt;br /&gt;
&lt;br /&gt;
How to: You examine the frequencies of the sound effect you want in very tiny steps and then mimic it playing very short notes with the correct medium frequency at that time, the shorter pieces it's divided into the better...&lt;br /&gt;
&lt;br /&gt;
Don't count on it being able to do much more while playing sound, it's very time-consuming.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                LI   $60                 ; high beep&lt;br /&gt;
                OUTS 5&lt;br /&gt;
&lt;br /&gt;
                LI   $A0                 ; middle beep&lt;br /&gt;
                OUTS 5&lt;br /&gt;
&lt;br /&gt;
                LI   $D0                 ; low beep&lt;br /&gt;
                OUTS 5&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You might need a pause after, not to turn sound off immediately and a&lt;br /&gt;
&lt;br /&gt;
                clr&lt;br /&gt;
                outs 5&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Here's an example of a creative soundeffect from Sean Riddles Lights Out:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                                ;make a bad sound&lt;br /&gt;
				li		$3f		; r1 loaded with $3f&lt;br /&gt;
				lr		1,a		&lt;br /&gt;
sndloop:&lt;br /&gt;
				li		$80		; $80 loaded into A&lt;br /&gt;
				outs	5			; send data to port&lt;br /&gt;
				lis		1		; A=1&lt;br /&gt;
				lr		5,a		; load r5 with 1&lt;br /&gt;
				pi		delay		; run the syscall &amp;quot;delay&amp;quot; (very short, only 1)&lt;br /&gt;
				lis		0		; same as clr&lt;br /&gt;
				outs	5			; send 0 on port&lt;br /&gt;
				ds		1		; r1 decreased&lt;br /&gt;
				bf		4,sndloop	; run the loop again until r1 is 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Making sound effects with the PlaySong routine ==&lt;br /&gt;
&lt;br /&gt;
Easiest example is Pac-man, e5frog studied the frequencies of the Pac-man's eating sound, the siren, death etc in very short pieces. Then set the data in the F8 to play that approximated medium frequency for exactly the same amount of time. I e it was hacked in little pieces, analysed, thrown away and put together again with brand new pieces.&lt;br /&gt;
&lt;br /&gt;
Recorded sound samples from a real Arcade Machine were analyzed.&lt;br /&gt;
The result came out quite fine!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Here's the result from Pac-man's eating sound:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;               ; Pac-man eats&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	db	1,116,1,116,1,116,1,163,1,163,2,178,3,191,3,202&lt;br /&gt;
	db	20,255&lt;br /&gt;
	db	3,207,3,199,2,191,1,172,1,172,1,161,2,161,3,161&lt;br /&gt;
	db	20,255&lt;br /&gt;
&lt;br /&gt;
	; repeated over and over again&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
There is also a siren in the background all the time that resulted in this data:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
		; Pac-man background siren&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	db	3,157,3,165,3,173,4,181,4,188,4,194,4,198,4,202,4,205,4,208,4,211,4,213&lt;br /&gt;
	db	4,211,4,208,4,205,4,202,4,198,4,194,4,188,4,181,3,173,3,165&lt;br /&gt;
&lt;br /&gt;
	; repeated over and over again&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Unfortunately they can't be heard in the game, it couldn't be used because they take to much cpu-time... Perhaps there could be simultanous music and effects some day - if that's handled by a second processor or similar...&lt;br /&gt;
&lt;br /&gt;
For now there's only a click when Pac-man eats his pills and an extra sound when monsters are blue.&lt;br /&gt;
Death is accurate - no need for graphics speed there since everything is still and Pac-man only changes into his death-sprite between the PlaySong routines.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
There are also this:&lt;br /&gt;
&amp;lt;pre&amp;gt;;---------------------------------------------------------------------------&lt;br /&gt;
; Dying Song&lt;br /&gt;
;---------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
sfx.dying.0:&lt;br /&gt;
	.byte	4,189,4,188,4,184,4,182,4,181&lt;br /&gt;
	.byte	4,182,4,185,4,188,4,190,4,192,4,193&lt;br /&gt;
	.byte	4,184,4,182,4,179,4,176,3,173,3,171&lt;br /&gt;
	.byte	3,173,3,176,4,179,4,182,4,185,4,186&lt;br /&gt;
	.byte	0	&lt;br /&gt;
sfx.dying.1:&lt;br /&gt;
	.byte	3,179,3,176,3,173,3,170,3,165,3,163&lt;br /&gt;
	.byte	3,165,3,170,3,173,3,176,3,179,3,181&lt;br /&gt;
	.byte	3,165,3,161,3,157,3,152,2,147,2,143&lt;br /&gt;
	.byte	0	&lt;br /&gt;
sfx.dying.2:&lt;br /&gt;
	.byte	2,147,2,152,3,157,3,161,3,166,3,168&lt;br /&gt;
	.byte	3,155,3,152,3,147,2,141,2,139,2,128&lt;br /&gt;
	.byte	2,135,2,138&lt;br /&gt;
	.byte	0	&lt;br /&gt;
sfx.dying.3:&lt;br /&gt;
	.byte	2,126,3,170,3,192,4,205,5,214,6,220&lt;br /&gt;
	.byte	7,224,7,229,8,232,9,234,10,255&lt;br /&gt;
	.byte	2,126,3,170,3,192,4,205,5,214,6,220&lt;br /&gt;
	.byte	7,224,7,229,8,232,9,234&lt;br /&gt;
	.byte	0					; end of song&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
;---------------------------------------------------------------------------&lt;br /&gt;
; Extra Pac-man sound at 10000 points&lt;br /&gt;
;---------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
sfx.extraPacman:&lt;br /&gt;
	.byte	6,121,6,122,12&lt;br /&gt;
	.byte 190,6,192,6,121,6,122,12&lt;br /&gt;
	.byte 190,6,192,6,121,6,122,12&lt;br /&gt;
	.byte 190,6,192,6,121,6,122,12&lt;br /&gt;
	.byte 190,6,192,6,121,6,122,12&lt;br /&gt;
	.byte 190,6,192,6,121,6,122,12&lt;br /&gt;
	.byte 190,6,192,6,121,6,122,12&lt;br /&gt;
	.byte 190,6,192,6,121,6,122,12&lt;br /&gt;
	.byte 190,6,192,6,121,6,122,12&lt;br /&gt;
	.byte 190,6,192,6,121,6,122,12&lt;br /&gt;
	.byte 190,6,192,0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>83.233.129.35</name></author>	</entry>

	<entry>
		<id>http://channelf.se/veswiki/index.php?title=Homebrew:Lights_Out&amp;diff=92</id>
		<title>Homebrew:Lights Out</title>
		<link rel="alternate" type="text/html" href="http://channelf.se/veswiki/index.php?title=Homebrew:Lights_Out&amp;diff=92"/>
				<updated>2007-08-14T20:13:55Z</updated>
		
		<summary type="html">&lt;p&gt;83.233.129.35: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''[http://members.cox.net/seanriddle/chanf.html Lights Out]''' is a homebrew game written by Sean Riddle. From the website:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;''There is a 5x5 grid of colored squares; you are trying to make them all green. You move the cursor around and push down to toggle the current square as well as the neighbors above, below, left and right. There are 64 patterns included, and after they are all played in random order, I invert red/green so that there are 64 more. I also added a few variations- game 2 uses a wrap-around grid, so that if you click on a square on the edge, the light on the opposite side will toggle as if you were playing on a torus. Note: not all of the 64 puzzles are solvable in this mode! Game 3 only lets you click on lights that are red. All the patterns are still solvable, but they usually take more clicks. You can also select mode 2, in which only the neighboring lights are toggled, not the one clicked on; mode 3, where the pattern is an X; or mode 4, X but the center light doesn't toggle. Again, not all of the built-in patterns are solvable in these modes.''&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
http://members.cox.net/seanriddle/chanf.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Here you can get the game as of 6/16/2004: [http://members.cox.net/seanriddle/lights.bin Download binary.]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Code ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
;lights out&lt;br /&gt;
;by Sean Riddle&lt;br /&gt;
;6/2004&lt;br /&gt;
;members.cox.net/seanriddle&lt;br /&gt;
&lt;br /&gt;
;for the Channel F multigame&lt;br /&gt;
;it will play in MESS&lt;br /&gt;
;it requires MG RAM at $2800 (could be rewritten to use regs only)&lt;br /&gt;
&lt;br /&gt;
;instructions:&lt;br /&gt;
;make all lights green&lt;br /&gt;
;l/r/u/d moves cursor&lt;br /&gt;
;push down toggles lights&lt;br /&gt;
;pull up replays current pattern&lt;br /&gt;
;when complete, the count of moves is shown&lt;br /&gt;
;then up replays pattern, down goes to next random&lt;br /&gt;
;after all 64 patterns are played randomly, the complements (red&amp;lt;-&amp;gt;green) are played&lt;br /&gt;
&lt;br /&gt;
;game 1 is normal - all included patterns are solvable&lt;br /&gt;
;game 2 is on a torus (wrap-around) !!! not all included patterns are solvable on a torus&lt;br /&gt;
;game 3 is lit-only (only lit buttons can be pressed)&lt;br /&gt;
&lt;br /&gt;
;mode 1 toggles self and u/d/l/r neighbors - + pattern&lt;br /&gt;
;mode 2 only toggles u/d/l/r neighbors !!! not all included patterns are solvable in this mode&lt;br /&gt;
;mode 3 toggles self and nw/ne/sw/se neighbors - X pattern&lt;br /&gt;
;mode 4 toggles nw/ne/sw/ne - X not self &lt;br /&gt;
&lt;br /&gt;
;todo:&lt;br /&gt;
;build game 2 or mode 2 patterns from random legal moves&lt;br /&gt;
;add random legal moves to patterns to create more&lt;br /&gt;
;rotate, invert patterns randomly for more variation&lt;br /&gt;
;three-state red, green, gray&lt;br /&gt;
;L modes&lt;br /&gt;
;more symbols-greek, smilies, arcade, &lt;br /&gt;
;currently 12 bytes short of 2K, but there's lots more room&lt;br /&gt;
&lt;br /&gt;
;egg - certain game/mode combo, solve certain pattern in minimum moves&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;BIOS calls&lt;br /&gt;
clrscrn: equ $00d0							;uses r31&lt;br /&gt;
delay: equ $008f&lt;br /&gt;
pushk: equ $0107							;used to allow more subroutine stack space&lt;br /&gt;
popk: equ $011e&lt;br /&gt;
drawchar: equ $0679&lt;br /&gt;
&lt;br /&gt;
array: 			equ $2800					;use Schach RAM to hold current state of 25 lights&lt;br /&gt;
history: 		equ $2900					;patterns we have already used, so we don't repeat&lt;br /&gt;
temp4: 			equ $2a00					;temp storage of 4 bytes&lt;br /&gt;
&lt;br /&gt;
org	$800&lt;br /&gt;
CartridgeStart: db		$55	                ; valid cart indicator&lt;br /&gt;
                NOP                      	; unused byte&lt;br /&gt;
&lt;br /&gt;
CartridgeEntry:&lt;br /&gt;
				LIS		$0                  ; init the h/w&lt;br /&gt;
                OUTS	1&lt;br /&gt;
                OUTS	4&lt;br /&gt;
                OUTS	5&lt;br /&gt;
                OUTS	0&lt;br /&gt;
                &lt;br /&gt;
                lisu	4					;r32=complement flag&lt;br /&gt;
                lisl	0&lt;br /&gt;
                lr		(IS),a&lt;br /&gt;
                &lt;br /&gt;
		        LI		$d6                 ; &lt;br /&gt;
                LR		$3,A                ; clear screen to gray&lt;br /&gt;
                PI		clrscrn             ; &lt;br /&gt;
&lt;br /&gt;
				li $11&lt;br /&gt;
				lisu 3						;init R30 game 1, mode 1&lt;br /&gt;
                lisl 6&lt;br /&gt;
                lr (IS),a&lt;br /&gt;
&lt;br /&gt;
				li $4a						;display G? prompt&lt;br /&gt;
				lr 0,a&lt;br /&gt;
				pi prompt&lt;br /&gt;
				lr a,4&lt;br /&gt;
				sl 4&lt;br /&gt;
				lisu 3						;r30 low nibble = game&lt;br /&gt;
				lisl 6&lt;br /&gt;
				lr (IS),a					;game 1 - normal, game 2 - wraparound; game 3 - lit only&lt;br /&gt;
				&lt;br /&gt;
				pi prompts					;display S?/M? ; mode 1 normal, mode 2 no center toggle&lt;br /&gt;
						&lt;br /&gt;
clrhist:									;clear history of patterns presented&lt;br /&gt;
				dci history&lt;br /&gt;
				li $41						; # of patterns +1&lt;br /&gt;
				lr 0,a&lt;br /&gt;
clrhist2:&lt;br /&gt;
				lis 0&lt;br /&gt;
				st&lt;br /&gt;
				ds 0&lt;br /&gt;
				bf 4,clrhist2&lt;br /&gt;
				&lt;br /&gt;
nextpat:&lt;br /&gt;
				lisu 2						;random #&lt;br /&gt;
				lisl 5&lt;br /&gt;
				lr a,(IS)&lt;br /&gt;
				&lt;br /&gt;
				lisu 3&lt;br /&gt;
				lisl 5&lt;br /&gt;
				as (IS)						;add to current pattern...&lt;br /&gt;
				ni $3f						;...mod 64...&lt;br /&gt;
				lr (IS),a					;...to get next pattern&lt;br /&gt;
				&lt;br /&gt;
				dci history					;check to see if we've already done this one&lt;br /&gt;
				adc&lt;br /&gt;
				lr q,dc&lt;br /&gt;
				lm&lt;br /&gt;
				ni $ff&lt;br /&gt;
				bt 4,unusedpat				;not yet used, display it&lt;br /&gt;
				&lt;br /&gt;
				;pattern already used, check for unused from top&lt;br /&gt;
				;if not found, clear array and start over&lt;br /&gt;
				&lt;br /&gt;
				dci history&lt;br /&gt;
checknext:&lt;br /&gt;
				lm&lt;br /&gt;
				ni $ff&lt;br /&gt;
				bf 4,checknext				;will always complete because we zeroed 1 extra byte in clrhist&lt;br /&gt;
				lr q,dc&lt;br /&gt;
				lr a,ql&lt;br /&gt;
				ai $ff						;lm moved us 1 past&lt;br /&gt;
				lr ql,a&lt;br /&gt;
				ci $40						;all done?&lt;br /&gt;
				bf 4,foundone				&lt;br /&gt;
				li $ff&lt;br /&gt;
				lisu 4						; set flag to start complements (random/rotations later)&lt;br /&gt;
				lisl 0&lt;br /&gt;
				lr (IS),a&lt;br /&gt;
				bf 0,clrhist				;no empty slots, start over&lt;br /&gt;
foundone:&lt;br /&gt;
				lr (IS),a					;update the current pattern&lt;br /&gt;
				&lt;br /&gt;
unusedpat:		&lt;br /&gt;
				lr dc,q						;mark it used&lt;br /&gt;
				li $ff&lt;br /&gt;
				st&lt;br /&gt;
				&lt;br /&gt;
replay:&lt;br /&gt;
				lisu 3						;current pattern # in r29&lt;br /&gt;
				lisl 5&lt;br /&gt;
				lr a,(IS)&lt;br /&gt;
				&lt;br /&gt;
				dci pats&lt;br /&gt;
				adc							; add cur pat to data pointer 5 times to get to the pat data&lt;br /&gt;
				adc&lt;br /&gt;
				adc&lt;br /&gt;
				adc&lt;br /&gt;
				adc&lt;br /&gt;
				&lt;br /&gt;
getpat:			lisu 2						;read bit pattern into regs 16-20&lt;br /&gt;
				lisl 0&lt;br /&gt;
				lis 5&lt;br /&gt;
				lr 1,a&lt;br /&gt;
getpatloop:&lt;br /&gt;
				lm&lt;br /&gt;
				lr (is)+,a&lt;br /&gt;
				ds 1&lt;br /&gt;
				bf 4,getpatloop&lt;br /&gt;
				&lt;br /&gt;
				dci array					;put byte pattern into RAM&lt;br /&gt;
				lis 5&lt;br /&gt;
				lr 2,a&lt;br /&gt;
&lt;br /&gt;
				lisu 4						;first time through 0, next time FF&lt;br /&gt;
				lisl 0&lt;br /&gt;
				lr a,(IS)&lt;br /&gt;
				lr 3,a						;temp&lt;br /&gt;
&lt;br /&gt;
				lisu 2&lt;br /&gt;
				lisl 0&lt;br /&gt;
storepatloop2:&lt;br /&gt;
				lis 5&lt;br /&gt;
				lr 1,a&lt;br /&gt;
				lr a,(is)+&lt;br /&gt;
storepatloop:&lt;br /&gt;
				lr 0,a&lt;br /&gt;
				ni $ff&lt;br /&gt;
				&lt;br /&gt;
				lr a,3&lt;br /&gt;
				&lt;br /&gt;
				bf 1,onebit&lt;br /&gt;
				bf 0,storepat&lt;br /&gt;
onebit:&lt;br /&gt;
				com&lt;br /&gt;
storepat:&lt;br /&gt;
				st&lt;br /&gt;
				lr a,0&lt;br /&gt;
				sl 1&lt;br /&gt;
				lr 0,a&lt;br /&gt;
				ds 1&lt;br /&gt;
				bf 4,storepatloop&lt;br /&gt;
				ds 2&lt;br /&gt;
				bf 4,storepatloop2&lt;br /&gt;
&lt;br /&gt;
				lis 0						;init variables to 0&lt;br /&gt;
                lisu 3&lt;br /&gt;
                lisl 0&lt;br /&gt;
                lr (IS)+,a					;r24=row (3:0)&lt;br /&gt;
                lr (IS)+,a					;r25=col (3:1)&lt;br /&gt;
                lr (IS)+,a             		;r26=cursor (3:2)&lt;br /&gt;
                lr (IS)+,a					;r27=array index (3:3)&lt;br /&gt;
                lr (IS)+,a					;r28=parameter to toggle sub (3:4)&lt;br /&gt;
                lisu 2&lt;br /&gt;
                lisl 6&lt;br /&gt;
                lr (IS)+,a					;r22=press counter lo (2:6)&lt;br /&gt;
                lr (IS)+,a					;r23=press counter hi (2:7)&lt;br /&gt;
&lt;br /&gt;
				dci grid					;draw the grid&lt;br /&gt;
				pi	drawlines&lt;br /&gt;
			&lt;br /&gt;
;draw lights&lt;br /&gt;
				li 24						;array index&lt;br /&gt;
				lisu 3&lt;br /&gt;
				lisl 3&lt;br /&gt;
				lr (IS),a&lt;br /&gt;
sqloop:&lt;br /&gt;
				pi drawlight&lt;br /&gt;
				lisu 3&lt;br /&gt;
				lisl 3&lt;br /&gt;
				lr a,(IS)&lt;br /&gt;
				ai $ff&lt;br /&gt;
				lr (IS),a&lt;br /&gt;
				bt 2,sqloop					;branch if &amp;gt;= 0&lt;br /&gt;
&lt;br /&gt;
				dci currows&lt;br /&gt;
				lm&lt;br /&gt;
				lr	5,a						;upper row&lt;br /&gt;
				dci curcols&lt;br /&gt;
				lm&lt;br /&gt;
				lr	4,a						;left col&lt;br /&gt;
				dci	cursor					;start with the cursor in light 0&lt;br /&gt;
				pi square&lt;br /&gt;
				&lt;br /&gt;
mainloop:&lt;br /&gt;
				pi readhc&lt;br /&gt;
				lr 0,a						;save controller input&lt;br /&gt;
				lisu 2                		;inc random seed&lt;br /&gt;
				lisl 5&lt;br /&gt;
				lr a,(IS)&lt;br /&gt;
				inc&lt;br /&gt;
				lr (IS),a&lt;br /&gt;
&lt;br /&gt;
; redraw current square without cursor&lt;br /&gt;
				lisu 3&lt;br /&gt;
				lisl 2&lt;br /&gt;
				lr a,(IS)+&lt;br /&gt;
				lr (IS),a&lt;br /&gt;
				pi drawlight&lt;br /&gt;
&lt;br /&gt;
				lr a,0&lt;br /&gt;
				ni $0c&lt;br /&gt;
				bt 4,notupdn&lt;br /&gt;
				ci $08&lt;br /&gt;
				bf 4,down&lt;br /&gt;
				lisu 3						;up&lt;br /&gt;
				lisl 0						;r24 is row&lt;br /&gt;
				ds (IS)						;prev row&lt;br /&gt;
				bf 2,minrow					;&amp;gt;=0?&lt;br /&gt;
updcurx:&lt;br /&gt;
				jmp updcur&lt;br /&gt;
minrow:&lt;br /&gt;
				lis 4&lt;br /&gt;
				lr (IS),a	&lt;br /&gt;
				bf 0,updcurx&lt;br /&gt;
down:&lt;br /&gt;
				lisu 3&lt;br /&gt;
				lisl 0&lt;br /&gt;
				lr a,(IS)&lt;br /&gt;
				inc							;next row&lt;br /&gt;
				lr (IS),a&lt;br /&gt;
				ci 5						;too far?&lt;br /&gt;
				bt 4,maxrow&lt;br /&gt;
				bf 0,updcurx&lt;br /&gt;
maxrow:&lt;br /&gt;
				lis 0&lt;br /&gt;
				lr (IS),a&lt;br /&gt;
				bf 0,updcurx&lt;br /&gt;
notupdn:&lt;br /&gt;
				lr a,0&lt;br /&gt;
				ni $03&lt;br /&gt;
				bt 4,notlfrt&lt;br /&gt;
				ci $02&lt;br /&gt;
				bf 4,right&lt;br /&gt;
				lisu 3						;left&lt;br /&gt;
				lisl 1						;r25 is col&lt;br /&gt;
				ds (IS)						;prev col&lt;br /&gt;
				bf 2,prevcol				;&amp;gt;=0?&lt;br /&gt;
				bf 0,updcurx&lt;br /&gt;
prevcol:&lt;br /&gt;
				lis 4&lt;br /&gt;
				lr (IS),a&lt;br /&gt;
				bf 0,updcurx&lt;br /&gt;
right:&lt;br /&gt;
				lisu 3&lt;br /&gt;
				lisl 1&lt;br /&gt;
				lr a,(IS)&lt;br /&gt;
				inc							;next col&lt;br /&gt;
				lr (IS),a&lt;br /&gt;
				ci 5						;too far?&lt;br /&gt;
				bf 4,updcurx&lt;br /&gt;
				lis 0&lt;br /&gt;
				lr (IS),a&lt;br /&gt;
				bf 0,updcurx&lt;br /&gt;
notlfrt:&lt;br /&gt;
				lr a,0&lt;br /&gt;
				ni $c0&lt;br /&gt;
				bt 4,mainloop&lt;br /&gt;
				ci $80&lt;br /&gt;
				bt 4,pushdown&lt;br /&gt;
				jmp replay					;pull up replays current pattern&lt;br /&gt;
&lt;br /&gt;
pushdown:&lt;br /&gt;
				lisu 3&lt;br /&gt;
				lisl 6&lt;br /&gt;
				lr a,(IS)&lt;br /&gt;
				ni $f0&lt;br /&gt;
				ci $40						;if game=3, can only press lit buttons&lt;br /&gt;
				bf 4,allowpress&lt;br /&gt;
&lt;br /&gt;
				lisu 3&lt;br /&gt;
				lisl 2						; get cursor loc&lt;br /&gt;
				lr a,(IS)&lt;br /&gt;
				&lt;br /&gt;
				dci array&lt;br /&gt;
				adc&lt;br /&gt;
				lm&lt;br /&gt;
				ni $ff&lt;br /&gt;
				bf 4,allowpress&lt;br /&gt;
				&lt;br /&gt;
				;make a bad sound&lt;br /&gt;
				li		$3f&lt;br /&gt;
				lr		1,a&lt;br /&gt;
sndloop:&lt;br /&gt;
				li		$80&lt;br /&gt;
				outs	5&lt;br /&gt;
				lis		1&lt;br /&gt;
				lr		5,a&lt;br /&gt;
				pi		delay&lt;br /&gt;
				lis		0&lt;br /&gt;
				outs	5&lt;br /&gt;
				ds		1&lt;br /&gt;
				bf		4,sndloop&lt;br /&gt;
				&lt;br /&gt;
				jmp		updcur&lt;br /&gt;
				&lt;br /&gt;
allowpress:&lt;br /&gt;
				lisu 2						;inc press counter&lt;br /&gt;
				lisl 6		&lt;br /&gt;
				lis 1&lt;br /&gt;
				ai $66&lt;br /&gt;
				asd (IS)					;thanks Fredric!&lt;br /&gt;
				lr (IS)+,a&lt;br /&gt;
				bf 2,nocarry&lt;br /&gt;
				lis 1&lt;br /&gt;
				ai $66&lt;br /&gt;
				asd (IS)&lt;br /&gt;
				lr (IS),a&lt;br /&gt;
nocarry:&lt;br /&gt;
				lisu 3&lt;br /&gt;
                lisl 6						;if mode=2 or 4, no center toggle&lt;br /&gt;
                lr a,(IS)&lt;br /&gt;
                ni $f						;mode in low nibble&lt;br /&gt;
                ci $2&lt;br /&gt;
                bt 4,nocenter&lt;br /&gt;
                ci $8&lt;br /&gt;
                bt 4,nocenter&lt;br /&gt;
				&lt;br /&gt;
				lisu 3&lt;br /&gt;
				lisl 2						; get cursor loc&lt;br /&gt;
				lr a,(IS)&lt;br /&gt;
				&lt;br /&gt;
				lisl 4&lt;br /&gt;
				lr (IS),a&lt;br /&gt;
				pi toggle					;toggle center light&lt;br /&gt;
&lt;br /&gt;
nocenter:&lt;br /&gt;
				dci plustable&lt;br /&gt;
				lisu 3&lt;br /&gt;
                lisl 6						;if mode=3 or 4, X toggle&lt;br /&gt;
                lr a,(IS)&lt;br /&gt;
                ni $f						;mode in low nibble&lt;br /&gt;
                ci $4&lt;br /&gt;
                bt 4,xtoggle				;mode 3, X toggle&lt;br /&gt;
                ci $8&lt;br /&gt;
                bt 4,xtoggle				;mode 4, X toggle&lt;br /&gt;
                bf 0,dotoggle&lt;br /&gt;
                &lt;br /&gt;
xtoggle:&lt;br /&gt;
				dci xtable&lt;br /&gt;
dotoggle:&lt;br /&gt;
                lisl 2&lt;br /&gt;
                lr a,(IS)					;get cursor loc&lt;br /&gt;
                as (IS)&lt;br /&gt;
                as (IS)&lt;br /&gt;
                as (IS)						;*4 for table offset&lt;br /&gt;
                adc&lt;br /&gt;
                lm							;get 4 neighbors&lt;br /&gt;
                lr 0,a&lt;br /&gt;
                lm&lt;br /&gt;
                lr 1,a&lt;br /&gt;
                lm&lt;br /&gt;
                lr 2,a&lt;br /&gt;
                lm&lt;br /&gt;
                &lt;br /&gt;
                dci temp4					;store them temporarily&lt;br /&gt;
                st			;t4&lt;br /&gt;
                lr a,2&lt;br /&gt;
                st			;t3&lt;br /&gt;
                lr a,1&lt;br /&gt;
                st			;t2&lt;br /&gt;
                lr a,0&lt;br /&gt;
                st			;t1&lt;br /&gt;
&lt;br /&gt;
				dci temp4                	;toggle each neighbor&lt;br /&gt;
				li 3&lt;br /&gt;
				adc&lt;br /&gt;
                pi togglem	;t1&lt;br /&gt;
                &lt;br /&gt;
                dci temp4&lt;br /&gt;
                lm&lt;br /&gt;
                lm&lt;br /&gt;
                pi togglem	;t2&lt;br /&gt;
                &lt;br /&gt;
                dci temp4&lt;br /&gt;
                lm&lt;br /&gt;
                pi togglem	;t3&lt;br /&gt;
                &lt;br /&gt;
                dci temp4&lt;br /&gt;
                pi togglem	;t4&lt;br /&gt;
                &lt;br /&gt;
updcur:&lt;br /&gt;
				lisu 3						;calc index from row and col&lt;br /&gt;
				lisl 0&lt;br /&gt;
				lr a,(IS)&lt;br /&gt;
				as (IS)&lt;br /&gt;
				as (IS)&lt;br /&gt;
				as (IS)&lt;br /&gt;
				as (IS)						;row * 5&lt;br /&gt;
&lt;br /&gt;
				lisu 3&lt;br /&gt;
				lisl 1&lt;br /&gt;
				as (IS)+					;add in col&lt;br /&gt;
				lr (IS),a&lt;br /&gt;
&lt;br /&gt;
				dci currows					;get row and column to draw cursor&lt;br /&gt;
				lisu 3&lt;br /&gt;
				lisl 0&lt;br /&gt;
				lr a,(IS)+&lt;br /&gt;
				adc&lt;br /&gt;
				lm&lt;br /&gt;
				lr 5,a&lt;br /&gt;
				&lt;br /&gt;
				dci curcols&lt;br /&gt;
				lr a,(IS)&lt;br /&gt;
				adc&lt;br /&gt;
				lm&lt;br /&gt;
				lr 4,a&lt;br /&gt;
				&lt;br /&gt;
				dci	cursor					;draw the cursor&lt;br /&gt;
				pi square&lt;br /&gt;
				&lt;br /&gt;
				LI $3F						;debounce by pausing a while&lt;br /&gt;
				LR 5,A&lt;br /&gt;
                pi delay&lt;br /&gt;
				&lt;br /&gt;
				;check for all green (win)&lt;br /&gt;
				dci array&lt;br /&gt;
				li 24						;array index&lt;br /&gt;
				lisu 3&lt;br /&gt;
				lisl 3&lt;br /&gt;
				lr (IS),a&lt;br /&gt;
chkloop:&lt;br /&gt;
				lm&lt;br /&gt;
				ni $ff&lt;br /&gt;
				bt 4,lighton&lt;br /&gt;
				jmp mainloop				;not a win&lt;br /&gt;
lighton:&lt;br /&gt;
				lisu 3&lt;br /&gt;
				lisl 3&lt;br /&gt;
				lr a,(IS)&lt;br /&gt;
				ai $ff&lt;br /&gt;
				lr (IS),a&lt;br /&gt;
				bt 2,chkloop&lt;br /&gt;
&lt;br /&gt;
				;made it here, all off&lt;br /&gt;
				;make a winning sound&lt;br /&gt;
				li		$3f&lt;br /&gt;
				lr		1,a&lt;br /&gt;
snd2loop:&lt;br /&gt;
				li		$40&lt;br /&gt;
				outs	5&lt;br /&gt;
				&lt;br /&gt;
				lr		a,1&lt;br /&gt;
snd2loopa:&lt;br /&gt;
				inc&lt;br /&gt;
				bf		4,snd2loopa&lt;br /&gt;
				&lt;br /&gt;
				lis		0&lt;br /&gt;
				outs	5&lt;br /&gt;
				ds		1&lt;br /&gt;
				bf		4,snd2loop&lt;br /&gt;
						&lt;br /&gt;
                li 32				;draw 2 concentric squares&lt;br /&gt;
                lr 4,a&lt;br /&gt;
                li 18&lt;br /&gt;
                lr 5,a&lt;br /&gt;
                dci winsq1&lt;br /&gt;
                pi square&lt;br /&gt;
                li 34&lt;br /&gt;
                lr 4,a&lt;br /&gt;
                li 20&lt;br /&gt;
                lr 5,a&lt;br /&gt;
                dci winsq2&lt;br /&gt;
                pi square&lt;br /&gt;
                &lt;br /&gt;
                ;print # of moves from r23/22 (2:7/6)&lt;br /&gt;
                li $1e				;row&lt;br /&gt;
                lr 2,a&lt;br /&gt;
                lisu 2				;1000s digit&lt;br /&gt;
                lisl 7&lt;br /&gt;
                lr a,(IS)&lt;br /&gt;
                sr 4&lt;br /&gt;
                bt 4,lt1000&lt;br /&gt;
                oi $40&lt;br /&gt;
                lr 0,a&lt;br /&gt;
                li $2a&lt;br /&gt;
                lr 1,a&lt;br /&gt;
                pi drawchar&lt;br /&gt;
                bf 0,d100&lt;br /&gt;
&lt;br /&gt;
lt1000:&lt;br /&gt;
				li $2c&lt;br /&gt;
				lr 1,a&lt;br /&gt;
d100:				&lt;br /&gt;
				lr a,1&lt;br /&gt;
				inc&lt;br /&gt;
				lr 1,a&lt;br /&gt;
                lisu 2				;100s digit&lt;br /&gt;
                lisl 7&lt;br /&gt;
                lr a,(IS)&lt;br /&gt;
                ni $f&lt;br /&gt;
                bf 4,gt100&lt;br /&gt;
                lr a,(IS)			;print 0 if x0yz where x &amp;gt; 0&lt;br /&gt;
                ni $ff&lt;br /&gt;
                bt 4,lt100&lt;br /&gt;
                lis 0&lt;br /&gt;
                &lt;br /&gt;
gt100:&lt;br /&gt;
                oi $40&lt;br /&gt;
                lr 0,a&lt;br /&gt;
                pi drawchar&lt;br /&gt;
                bf 0,d10&lt;br /&gt;
&lt;br /&gt;
lt100:&lt;br /&gt;
				li $30&lt;br /&gt;
				lr 1,a&lt;br /&gt;
d10:&lt;br /&gt;
				lr a,1&lt;br /&gt;
				inc&lt;br /&gt;
				lr 1,a&lt;br /&gt;
                lisu 2				;10s digit&lt;br /&gt;
                lisl 6&lt;br /&gt;
                lr a,(IS)&lt;br /&gt;
                sr 4&lt;br /&gt;
                bf 4,gt10&lt;br /&gt;
                lisl 7				;print 0 if xy0z where x or y &amp;gt; 0&lt;br /&gt;
                lr a,(IS)&lt;br /&gt;
                ni $ff&lt;br /&gt;
                bt 4,lt10&lt;br /&gt;
                lis 0&lt;br /&gt;
gt10:&lt;br /&gt;
                oi $40&lt;br /&gt;
                lr 0,a&lt;br /&gt;
                pi drawchar&lt;br /&gt;
                bf 0,d1&lt;br /&gt;
&lt;br /&gt;
lt10:&lt;br /&gt;
				li $34&lt;br /&gt;
				lr 1,a&lt;br /&gt;
d1:&lt;br /&gt;
				lr a,1&lt;br /&gt;
				inc&lt;br /&gt;
				lr 1,a&lt;br /&gt;
                lisu 2				;1s digit&lt;br /&gt;
                lisl 6&lt;br /&gt;
                lr a,(IS)&lt;br /&gt;
                ni $f&lt;br /&gt;
                oi $40&lt;br /&gt;
                lr 0,a&lt;br /&gt;
                pi drawchar&lt;br /&gt;
                &lt;br /&gt;
waitupdn:&lt;br /&gt;
                pi readhc			;wait for hc up/down&lt;br /&gt;
                ni $c0&lt;br /&gt;
                bt 4,waitupdn&lt;br /&gt;
                ni $80&lt;br /&gt;
                bt 4,redo&lt;br /&gt;
                jmp nextpat			;down - get next random pattern&lt;br /&gt;
                &lt;br /&gt;
redo:&lt;br /&gt;
				lisu 3&lt;br /&gt;
                lisl 6&lt;br /&gt;
                lr a,(IS)&lt;br /&gt;
                ci $41&lt;br /&gt;
                bf 4,replay2&lt;br /&gt;
                &lt;br /&gt;
                lisl 5&lt;br /&gt;
                lr a,(IS)&lt;br /&gt;
                ci 51&lt;br /&gt;
                bf 4,replay2&lt;br /&gt;
                &lt;br /&gt;
				lisu 2&lt;br /&gt;
				lisl 7&lt;br /&gt;
				lr a,(IS)-&lt;br /&gt;
				ci 0&lt;br /&gt;
				bf 4,replay2&lt;br /&gt;
				lr a,(IS)&lt;br /&gt;
				ci $18&lt;br /&gt;
				bf 4,replay2&lt;br /&gt;
&lt;br /&gt;
		        LI		$d6&lt;br /&gt;
                LR		$3,A&lt;br /&gt;
                PI		clrscrn&lt;br /&gt;
                		              &lt;br /&gt;
                dci blitparm&lt;br /&gt;
                pi blit&lt;br /&gt;
                &lt;br /&gt;
				li $3f&lt;br /&gt;
				lr 1,a&lt;br /&gt;
snd3loop:&lt;br /&gt;
				li $40&lt;br /&gt;
				outs 5&lt;br /&gt;
				li $1&lt;br /&gt;
				lr 5,a&lt;br /&gt;
				pi delay&lt;br /&gt;
				lis 0&lt;br /&gt;
				outs 5&lt;br /&gt;
				ds 1&lt;br /&gt;
				bf 4,snd3loop&lt;br /&gt;
&lt;br /&gt;
				pi readhc&lt;br /&gt;
		        LI		$d6&lt;br /&gt;
                LR		$3,A&lt;br /&gt;
                PI		clrscrn&lt;br /&gt;
				&lt;br /&gt;
				jmp nextpat			&lt;br /&gt;
replay2:&lt;br /&gt;
				jmp replay			;up - replay current pattern&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
readhc:								;wait until one of the hand controllers is moved&lt;br /&gt;
				lis 0&lt;br /&gt;
				outs 0&lt;br /&gt;
				lis 0&lt;br /&gt;
				outs 4&lt;br /&gt;
				ins 4&lt;br /&gt;
				com					;un-invert port data&lt;br /&gt;
				ni $cf				;mask off twists, since we don't use them&lt;br /&gt;
				bf 4,gothc&lt;br /&gt;
				outs 1&lt;br /&gt;
				ins 1&lt;br /&gt;
				com&lt;br /&gt;
				ni $cf&lt;br /&gt;
				bt 4,readhc&lt;br /&gt;
gothc:			pop&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
togglem:							;change a square (index in memory) from red to green or vice versa&lt;br /&gt;
				lr k,p&lt;br /&gt;
				pi pushk&lt;br /&gt;
				&lt;br /&gt;
				lm&lt;br /&gt;
				lr 0,a&lt;br /&gt;
				ni $80				;if high bit set, then this was a wrap&lt;br /&gt;
				bt 4,notwrapped&lt;br /&gt;
				&lt;br /&gt;
				lisu 3&lt;br /&gt;
                lisl 6				;if game=$2x, allow wrap-around&lt;br /&gt;
                lr a,(IS)&lt;br /&gt;
                ni $f0				;mode in low nibble&lt;br /&gt;
                ci $20&lt;br /&gt;
				bf 4,toggleexit2	;no wrap allowed&lt;br /&gt;
				&lt;br /&gt;
notwrapped:&lt;br /&gt;
				lr a,0&lt;br /&gt;
				ni $7f				;strip off &amp;quot;wrapped&amp;quot; bit&lt;br /&gt;
				lisu 3&lt;br /&gt;
				lisl 4&lt;br /&gt;
				lr (IS),a&lt;br /&gt;
				bf 0,toggle2&lt;br /&gt;
				&lt;br /&gt;
toggle:								;change a square (index in r28) from red to green or vice versa&lt;br /&gt;
				lr k,p&lt;br /&gt;
				pi pushk&lt;br /&gt;
&lt;br /&gt;
				lisu 3&lt;br /&gt;
				lisl 4&lt;br /&gt;
				lr a,(IS)		&lt;br /&gt;
toggle2:&lt;br /&gt;
				dci array&lt;br /&gt;
				adc&lt;br /&gt;
				lm&lt;br /&gt;
				ni $ff&lt;br /&gt;
				lr a,(IS)&lt;br /&gt;
				dci array&lt;br /&gt;
				adc&lt;br /&gt;
				bt 4,notset&lt;br /&gt;
				lis 0&lt;br /&gt;
				bf 0,toggleexit&lt;br /&gt;
notset:&lt;br /&gt;
				li $ff&lt;br /&gt;
&lt;br /&gt;
toggleexit:&lt;br /&gt;
				st&lt;br /&gt;
				lisu 3&lt;br /&gt;
				lisl 4&lt;br /&gt;
				lr a,(IS)-&lt;br /&gt;
				lr (IS),a&lt;br /&gt;
				pi drawlight&lt;br /&gt;
toggleexit2:&lt;br /&gt;
				pi popk&lt;br /&gt;
				pk&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
square:							;draw a square&lt;br /&gt;
		; dci to color,width,height&lt;br /&gt;
		;r5=upper row&lt;br /&gt;
		;r4=left col&lt;br /&gt;
		; uses r2,r3,r6&lt;br /&gt;
				lr k,p&lt;br /&gt;
				pi pushk&lt;br /&gt;
				lm&lt;br /&gt;
				outs	1		;set the color&lt;br /&gt;
				&lt;br /&gt;
				lr a,5&lt;br /&gt;
				com&lt;br /&gt;
				outs 5			;set the row&lt;br /&gt;
				&lt;br /&gt;
				lm				;&lt;br /&gt;
				lr 5,a			;save the width&lt;br /&gt;
				&lt;br /&gt;
				lm&lt;br /&gt;
				lr 3,a			;store the height&lt;br /&gt;
&lt;br /&gt;
squarev:&lt;br /&gt;
				lr a,4&lt;br /&gt;
				lr 2,a			;save col&lt;br /&gt;
				lr a,5			;get width&lt;br /&gt;
squareh:		lr 6,a			;save temp&lt;br /&gt;
				&lt;br /&gt;
				lr a,2&lt;br /&gt;
				com&lt;br /&gt;
				outs	4		;set the col&lt;br /&gt;
				lr a,2&lt;br /&gt;
				inc				;next col&lt;br /&gt;
				lr 2,a&lt;br /&gt;
				&lt;br /&gt;
				pi plot&lt;br /&gt;
							&lt;br /&gt;
				lr a,6&lt;br /&gt;
				ai $ff&lt;br /&gt;
				bf 4,squareh	;all done w/row&lt;br /&gt;
				&lt;br /&gt;
				ins 5			;next row&lt;br /&gt;
				ai $ff			;complement, so subtract 1&lt;br /&gt;
				outs 5&lt;br /&gt;
				&lt;br /&gt;
				lr a,3			&lt;br /&gt;
				ai $ff&lt;br /&gt;
				lr 3,a&lt;br /&gt;
				bf 4,squarev	;done full height?&lt;br /&gt;
				pi popk&lt;br /&gt;
				pk&lt;br /&gt;
				&lt;br /&gt;
				&lt;br /&gt;
drawlines:		; dci to table of 	color,len,row,start col (horiz if len&amp;lt;$80)&lt;br /&gt;
				;					color,len,col,start row (vert if len&amp;gt;$80)&lt;br /&gt;
				;					repeat until $FF&lt;br /&gt;
				;uses r5&lt;br /&gt;
				lr	k,p&lt;br /&gt;
line2:&lt;br /&gt;
				lm&lt;br /&gt;
				ci $ff&lt;br /&gt;
				bt 4,lineexit	;ff means done&lt;br /&gt;
				outs	1		;set the color&lt;br /&gt;
&lt;br /&gt;
				lm				;get len&lt;br /&gt;
				ni $ff			;lm doesn't set status flags&lt;br /&gt;
				bf 1,vline		;vertical lines are negative (and sign bit backwards)&lt;br /&gt;
				lr 5,a			;horiz-save len&lt;br /&gt;
				lm&lt;br /&gt;
				com&lt;br /&gt;
				outs 5			;set the row&lt;br /&gt;
				lm				;get starting column&lt;br /&gt;
hline2:&lt;br /&gt;
				com&lt;br /&gt;
				outs 4			;set the column&lt;br /&gt;
				pi plot&lt;br /&gt;
				ds 5								&lt;br /&gt;
				bt 4,line2&lt;br /&gt;
				ins 4			; &lt;br /&gt;
				com&lt;br /&gt;
				inc&lt;br /&gt;
				bf  0,hline2&lt;br /&gt;
lineexit:&lt;br /&gt;
				pk&lt;br /&gt;
&lt;br /&gt;
vline:&lt;br /&gt;
				ni $3f			;mask off sign bit, limit len to 63 (height of screen)&lt;br /&gt;
				lr 5,a			;save it&lt;br /&gt;
				lm&lt;br /&gt;
				com&lt;br /&gt;
				outs 4			;set the column&lt;br /&gt;
				lm				;get starting row&lt;br /&gt;
vline2:&lt;br /&gt;
				com&lt;br /&gt;
				outs 5			;set the row&lt;br /&gt;
				pi plot		&lt;br /&gt;
				ds 5								&lt;br /&gt;
				bt 4,line2&lt;br /&gt;
				ins 5&lt;br /&gt;
				com&lt;br /&gt;
				inc&lt;br /&gt;
				bf  0,vline2&lt;br /&gt;
				&lt;br /&gt;
				&lt;br /&gt;
plot:							;this is what you have to do to transfer data to the screen memory&lt;br /&gt;
								;after setting row, column and color&lt;br /&gt;
				li	$60&lt;br /&gt;
				outs	0&lt;br /&gt;
				li	$50&lt;br /&gt;
				outs	0&lt;br /&gt;
				lis	6	; little delay&lt;br /&gt;
pdelay:			ai $ff&lt;br /&gt;
				bf	4,pdelay&lt;br /&gt;
				pop&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
drawlight:						;draws a red or green square based off value passed in r27&lt;br /&gt;
				lr k,p&lt;br /&gt;
				pi pushk&lt;br /&gt;
&lt;br /&gt;
				lisu 3&lt;br /&gt;
				lisl 3&lt;br /&gt;
				lr a,(IS)&lt;br /&gt;
				dci sqrows&lt;br /&gt;
				adc&lt;br /&gt;
				lm		&lt;br /&gt;
				lr 5,a&lt;br /&gt;
				&lt;br /&gt;
				lr a,(IS)&lt;br /&gt;
				dci sqcols&lt;br /&gt;
				adc&lt;br /&gt;
				lm&lt;br /&gt;
				lr 4,a&lt;br /&gt;
				&lt;br /&gt;
				lr a,(IS)					; read color from array&lt;br /&gt;
				dci array&lt;br /&gt;
				adc&lt;br /&gt;
				lm&lt;br /&gt;
				ni $ff&lt;br /&gt;
				bt 4,dogreen&lt;br /&gt;
				dci redsq&lt;br /&gt;
				bf 0,dosq&lt;br /&gt;
dogreen:&lt;br /&gt;
				dci greensq&lt;br /&gt;
dosq:&lt;br /&gt;
				pi square&lt;br /&gt;
				pi popk&lt;br /&gt;
				pk&lt;br /&gt;
&lt;br /&gt;
;blit code from cart 26&lt;br /&gt;
blit:&lt;br /&gt;
         		LR      K,P &lt;br /&gt;
         		pi pushk&lt;br /&gt;
         		LISU    0&lt;br /&gt;
blitloop:&lt;br /&gt;
				LISL    4&lt;br /&gt;
getparms:&lt;br /&gt;
				LM          &lt;br /&gt;
				LR      (IS)-,A&lt;br /&gt;
				BR7     getparms&lt;br /&gt;
				LM          &lt;br /&gt;
				LR      H,DC&lt;br /&gt;
				DCI     blitparm&lt;br /&gt;
				ADC         &lt;br /&gt;
				&lt;br /&gt;
				LIS     1&lt;br /&gt;
				LR      $7,A&lt;br /&gt;
				INS     5  &lt;br /&gt;
				COM         &lt;br /&gt;
				NI      $c0&lt;br /&gt;
				AS      $1&lt;br /&gt;
				COM         &lt;br /&gt;
blit2z:&lt;br /&gt;
				OUTS    5  &lt;br /&gt;
				DS      $3&lt;br /&gt;
				BF      2,blitexit&lt;br /&gt;
				LR      A,$2&lt;br /&gt;
				LR      $5,A&lt;br /&gt;
				LR      A,$0&lt;br /&gt;
				COM         &lt;br /&gt;
blit2a:&lt;br /&gt;
				OUTS    4  &lt;br /&gt;
				DS      $7&lt;br /&gt;
				BF      4,blit2c&lt;br /&gt;
				LIS     8&lt;br /&gt;
				LR      $7,A&lt;br /&gt;
				LM          &lt;br /&gt;
				LR      $6,A&lt;br /&gt;
				LIS     1&lt;br /&gt;
				NS      $4&lt;br /&gt;
				BT      4,blit2b&lt;br /&gt;
				LIS     0&lt;br /&gt;
				COM         &lt;br /&gt;
blit2b:&lt;br /&gt;
				ADC         &lt;br /&gt;
blit2c:&lt;br /&gt;
				LR      A,$6&lt;br /&gt;
				AS      $6&lt;br /&gt;
				LR      $6,A&lt;br /&gt;
				LR      A,$4&lt;br /&gt;
				BT      2,blit2d&lt;br /&gt;
				LIS     0&lt;br /&gt;
blit2d:&lt;br /&gt;
				COM         &lt;br /&gt;
				OUTS    1  &lt;br /&gt;
				LIS     6&lt;br /&gt;
				SL      4   &lt;br /&gt;
				OUTS    0  &lt;br /&gt;
				SL      1   &lt;br /&gt;
				OUTS    0  &lt;br /&gt;
				BF      0,blit2e&lt;br /&gt;
blit2e:&lt;br /&gt;
				AI      $60&lt;br /&gt;
				BF      4,blit2e&lt;br /&gt;
				DS      $5&lt;br /&gt;
				BT      4,blit2f&lt;br /&gt;
				INS     4  &lt;br /&gt;
				AI      $ff&lt;br /&gt;
				BF      0,blit2a&lt;br /&gt;
blit2f:&lt;br /&gt;
				INS     5  &lt;br /&gt;
				AI      $ff&lt;br /&gt;
				BF      0,blit2z&lt;br /&gt;
blitexit:&lt;br /&gt;
&lt;br /&gt;
				LR      DC,H&lt;br /&gt;
				LIS     2&lt;br /&gt;
				NS      $4&lt;br /&gt;
				BT      4,blitloop&lt;br /&gt;
				pi 		popk&lt;br /&gt;
				PK          &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;from the BIOS, but I removed T? (time) prompt&lt;br /&gt;
prompts:        LR   K,P                 ; &lt;br /&gt;
                PI   pushk               ; &lt;br /&gt;
prompts2:       LI   $85                 ; red 5 (S)&lt;br /&gt;
                LR   $0,A                ; &lt;br /&gt;
                PI   prompt              ; &lt;br /&gt;
                LR   A,$4                ; &lt;br /&gt;
                CI   $08                 ; is it button 4, Start?&lt;br /&gt;
                BF   $4,notbut4          ; no, check others&lt;br /&gt;
notbut2:&lt;br /&gt;
                PI   popk                ; yes, return&lt;br /&gt;
                PK                       ; &lt;br /&gt;
                &lt;br /&gt;
notbut4:        CI   $02                 ; is it button 2, Mode?&lt;br /&gt;
                BF   $4,notbut2          ; &lt;br /&gt;
                LI   $8e                 ; red M&lt;br /&gt;
                LR   $0,A                ; &lt;br /&gt;
                PI   prompt              ; &lt;br /&gt;
                LISU 3                   ; &lt;br /&gt;
                LISL 6                   ; &lt;br /&gt;
                LR   A,(IS)                ; &lt;br /&gt;
                as	4					;add the mode to the game #&lt;br /&gt;
                LR   (IS),A              ; &lt;br /&gt;
                BF   $0,prompts2         ; &lt;br /&gt;
                &lt;br /&gt;
                &lt;br /&gt;
;from the BIOS, but I added random # seed to readbuts&lt;br /&gt;
prompt:         LR   K,P                 ; $0099 - prints char r0 at row r1, col r2, waits for button&lt;br /&gt;
                PI   pushk               ; &lt;br /&gt;
                LI   $33                 ; r1=$33&lt;br /&gt;
                LR   $1,A                ; &lt;br /&gt;
                LI   $13                 ; r2=$13&lt;br /&gt;
                LR   $2,A                ; &lt;br /&gt;
                PI   drawchar            ; &lt;br /&gt;
                &lt;br /&gt;
                LI   $8b                 ; r0=8b	red ?&lt;br /&gt;
                LR   $0,A                ; &lt;br /&gt;
                PI   drawchar            ; &lt;br /&gt;
                &lt;br /&gt;
                PI   readbuts            ; &lt;br /&gt;
                LI   $33                 ; r1=$33&lt;br /&gt;
                LR   $1,A                ; &lt;br /&gt;
                LI   $13                 ; r2=$13&lt;br /&gt;
                LR   $2,A                ; &lt;br /&gt;
                LIS  $d                  ; r0=$d&lt;br /&gt;
                LR   $0,A                ; &lt;br /&gt;
                PI   drawchar            ; &lt;br /&gt;
                PI   drawchar            ; &lt;br /&gt;
                PI   popk                ; &lt;br /&gt;
                PK                       ; &lt;br /&gt;
                &lt;br /&gt;
readbuts:&lt;br /&gt;
				lisu 2                	;inc random seed&lt;br /&gt;
				lisl 5&lt;br /&gt;
				lr a,(IS)&lt;br /&gt;
				inc&lt;br /&gt;
				lr (IS),a&lt;br /&gt;
				&lt;br /&gt;
		        INS  0                   ; $00c1 - read buttons&lt;br /&gt;
                COM                      ; &lt;br /&gt;
                NI   $0f                 ; &lt;br /&gt;
                BT   4,readbuts          ; &lt;br /&gt;
                LR   $4,A                ; &lt;br /&gt;
                LI   $ff                 ; &lt;br /&gt;
                LR   $5,A                ; &lt;br /&gt;
dbounce:        DS   $5                  ; &lt;br /&gt;
                BF   $4,dbounce         ; &lt;br /&gt;
                jmp delay            ; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;colors: $40-red, $80=blue, $0=green, $c0=bkg&lt;br /&gt;
&lt;br /&gt;
;data to draw lines for grid&lt;br /&gt;
grid:				;horiz-color,len,row,start col&lt;br /&gt;
				db $80,66,7,18&lt;br /&gt;
				db $80,66,17,18&lt;br /&gt;
				db $80,66,27,18&lt;br /&gt;
				db $80,66,37,18&lt;br /&gt;
				db $80,66,47,18&lt;br /&gt;
				db $80,66,57,18&lt;br /&gt;
					;vert-color,$80+len,col,start row&lt;br /&gt;
				db $80,179,18,7	;179=128+51&lt;br /&gt;
				db $80,179,31,7&lt;br /&gt;
				db $80,179,44,7&lt;br /&gt;
				db $80,179,57,7&lt;br /&gt;
				db $80,179,70,7&lt;br /&gt;
				db $80,179,83,7&lt;br /&gt;
				db $ff&lt;br /&gt;
&lt;br /&gt;
;data to draw squares&lt;br /&gt;
redsq:				;color,width,height&lt;br /&gt;
				db $40,12,9&lt;br /&gt;
greensq:			;color,width,height&lt;br /&gt;
				db $0,12,9&lt;br /&gt;
cursor:				;color,width,height&lt;br /&gt;
				db $c0,4,3&lt;br /&gt;
winsq1:&lt;br /&gt;
				db $40,38,29	;red&lt;br /&gt;
winsq2:&lt;br /&gt;
				db $c0,34,25	;bkg&lt;br /&gt;
&lt;br /&gt;
;locations to draw each light, based on index (0-24)&lt;br /&gt;
sqrows:			&lt;br /&gt;
				db   8, 8, 8, 8, 8,18,18,18,18,18,28,28,28,28,28,38,38,38,38,38,48,48,48,48,48&lt;br /&gt;
sqcols:			&lt;br /&gt;
				db  19,32,45,58,71,19,32,45,58,71,19,32,45,58,71,19,32,45,58,71,19,32,45,58,71&lt;br /&gt;
				&lt;br /&gt;
;locations to draw cursor, based on row/column&lt;br /&gt;
currows:&lt;br /&gt;
				db	11,21,31,41,51&lt;br /&gt;
curcols:&lt;br /&gt;
				db	23,36,49,62,75&lt;br /&gt;
&lt;br /&gt;
plustable:		;squares to toggle based on cursor N E W S +128 means wrapped&lt;br /&gt;
				db 148,  1,132,  5&lt;br /&gt;
				db 149,  2,  0,  6&lt;br /&gt;
				db 150,  3,  1,  7&lt;br /&gt;
				db 151,  4,  2,  8  &lt;br /&gt;
				db 152,128,  3,  9&lt;br /&gt;
				&lt;br /&gt;
				db   0,  6,137, 10&lt;br /&gt;
				db   1,  7,  5, 11&lt;br /&gt;
				db   2,  8,  6, 12&lt;br /&gt;
				db   3,  9,  7, 13&lt;br /&gt;
				db   4,133,  8, 14&lt;br /&gt;
				&lt;br /&gt;
				db   5, 11,142, 15&lt;br /&gt;
				db   6, 12, 10, 16&lt;br /&gt;
				db   7, 13, 11, 17&lt;br /&gt;
				db   8, 14, 12, 18&lt;br /&gt;
				db   9,138, 13, 19&lt;br /&gt;
				&lt;br /&gt;
				db  10, 16,147, 20&lt;br /&gt;
				db  11, 17, 15, 21&lt;br /&gt;
				db  12, 18, 16, 22&lt;br /&gt;
				db  13, 19, 17, 23&lt;br /&gt;
				db  14,143, 18, 24&lt;br /&gt;
				&lt;br /&gt;
				db  15, 21,152,128&lt;br /&gt;
				db  16, 22, 20,129&lt;br /&gt;
				db  17, 23, 21,130&lt;br /&gt;
				db  18, 24, 22,131&lt;br /&gt;
				db  19,148, 23,132&lt;br /&gt;
				&lt;br /&gt;
xtable:		;squares to toggle based on cursor NW NE SW SE +128 means wrapped&lt;br /&gt;
				db 152,149,137,  6&lt;br /&gt;
				db 148,150,  5,  7&lt;br /&gt;
				db 149,151,  6,  8&lt;br /&gt;
				db 150,152,  7,  9&lt;br /&gt;
				db 151,148,  8,133&lt;br /&gt;
				&lt;br /&gt;
				db 132,  1,142, 11&lt;br /&gt;
				db   0,  2, 10, 12&lt;br /&gt;
				db   1,  3, 11, 13&lt;br /&gt;
				db   2,  4, 12, 14&lt;br /&gt;
				db   3,128, 13,138&lt;br /&gt;
				&lt;br /&gt;
				db 137,  6,147, 16&lt;br /&gt;
				db   5,  7, 15, 17&lt;br /&gt;
				db   6,  8, 16, 18&lt;br /&gt;
				db   7,  9, 17, 19&lt;br /&gt;
				db   8,133, 18,143&lt;br /&gt;
				&lt;br /&gt;
				db 142, 11,152, 21&lt;br /&gt;
				db  10, 12, 20, 22&lt;br /&gt;
				db  11, 13, 21, 23&lt;br /&gt;
				db  12, 14, 22, 24&lt;br /&gt;
				db  13,138, 23,148&lt;br /&gt;
				&lt;br /&gt;
				db 147, 16,132,129&lt;br /&gt;
				db  15, 17,128,130&lt;br /&gt;
				db  16, 18,129,131&lt;br /&gt;
				db  17, 19,130,132&lt;br /&gt;
				db  18,143,132,128 &lt;br /&gt;
&lt;br /&gt;
;the patterns - 1 bit is red, 0 is green&lt;br /&gt;
;other code has to be adjusted to use more or less than 64 patterns&lt;br /&gt;
;not all of these are solvable on a torus or if only the neighbors toggle&lt;br /&gt;
pats:&lt;br /&gt;
;				db 		$00,$00,$00,$80,$c0		; easy one for test&lt;br /&gt;
&lt;br /&gt;
                db      $20,$50,$88,$F8,$88&lt;br /&gt;
                db      $F0,$88,$88,$88,$F0&lt;br /&gt;
                db      $F8,$80,$F8,$80,$F8&lt;br /&gt;
                db      $F8,$80,$F0,$80,$80&lt;br /&gt;
                db      $88,$88,$F8,$88,$88&lt;br /&gt;
                db      $F8,$20,$20,$20,$F8&lt;br /&gt;
                db      $90,$A0,$C0,$A0,$90&lt;br /&gt;
                db      $80,$80,$80,$80,$F8&lt;br /&gt;
                db      $88,$D8,$A8,$88,$88&lt;br /&gt;
                db      $88,$C8,$A8,$98,$88&lt;br /&gt;
                db      $70,$88,$88,$88,$70&lt;br /&gt;
                db      $70,$88,$A8,$90,$68&lt;br /&gt;
                db      $70,$80,$70,$08,$70&lt;br /&gt;
                db      $F8,$20,$20,$20,$20&lt;br /&gt;
                db      $88,$88,$A8,$D8,$88&lt;br /&gt;
                db      $88,$50,$20,$50,$88&lt;br /&gt;
                db      $88,$50,$20,$20,$20&lt;br /&gt;
                db      $F8,$10,$20,$40,$F8&lt;br /&gt;
                db      $50,$50,$00,$70,$20&lt;br /&gt;
                db      $20,$70,$F8,$70,$20&lt;br /&gt;
                db      $D8,$20,$20,$20,$D8&lt;br /&gt;
                db      $00,$00,$20,$00,$00&lt;br /&gt;
                db      $00,$20,$50,$20,$00&lt;br /&gt;
                db      $20,$00,$88,$00,$20&lt;br /&gt;
                db      $50,$A8,$50,$A8,$50&lt;br /&gt;
                db      $A8,$70,$F8,$70,$A8&lt;br /&gt;
                db      $00,$D8,$50,$D8,$00&lt;br /&gt;
                db      $20,$88,$20,$88,$20&lt;br /&gt;
                db      $F8,$A8,$88,$A8,$F8&lt;br /&gt;
                db      $20,$60,$20,$20,$70&lt;br /&gt;
                db      $70,$08,$70,$80,$F8&lt;br /&gt;
                db      $70,$08,$70,$08,$70&lt;br /&gt;
                db      $F8,$00,$70,$00,$F8&lt;br /&gt;
                db      $70,$88,$70,$88,$70&lt;br /&gt;
                db      $F8,$88,$50,$70,$00&lt;br /&gt;
                db      $F8,$70,$20,$00,$00&lt;br /&gt;
                db      $20,$20,$F8,$20,$20&lt;br /&gt;
                db      $A8,$88,$F8,$88,$A8&lt;br /&gt;
                db      $C0,$A0,$A8,$28,$18&lt;br /&gt;
                db      $18,$08,$20,$80,$C0&lt;br /&gt;
                db      $D8,$88,$50,$88,$D8&lt;br /&gt;
                db      $18,$C0,$18,$C0,$18&lt;br /&gt;
                db      $A8,$A8,$A8,$A8,$A8&lt;br /&gt;
                db      $00,$F8,$00,$F8,$00&lt;br /&gt;
                db      $10,$78,$50,$F0,$40&lt;br /&gt;
                db      $C0,$E0,$70,$38,$18&lt;br /&gt;
                db      $60,$90,$70,$48,$30&lt;br /&gt;
                db      $A8,$A8,$50,$A8,$A8&lt;br /&gt;
                db      $98,$F0,$50,$78,$C8&lt;br /&gt;
                db      $70,$A8,$F8,$F8,$A8&lt;br /&gt;
                db      $A0,$E0,$B8,$10,$38&lt;br /&gt;
                db      $00,$00,$F8,$50,$50	; pi pattern&lt;br /&gt;
                db      $00,$40,$00,$10,$00&lt;br /&gt;
                db      $00,$50,$00,$50,$00&lt;br /&gt;
                db      $10,$48,$20,$90,$40&lt;br /&gt;
                db      $78,$E8,$F8,$B8,$F0&lt;br /&gt;
                db      $E0,$90,$E0,$90,$E0&lt;br /&gt;
                db      $30,$48,$C0,$48,$30&lt;br /&gt;
                db      $38,$48,$20,$90,$E0&lt;br /&gt;
                db      $00,$38,$00,$E0,$00&lt;br /&gt;
                db      $20,$20,$D8,$20,$20&lt;br /&gt;
                db      $20,$70,$A8,$20,$20&lt;br /&gt;
                db      $C8,$D0,$20,$58,$98&lt;br /&gt;
                db      $00,$70,$50,$70,$00&lt;br /&gt;
                &lt;br /&gt;
;8 bytes available here&lt;br /&gt;
&lt;br /&gt;
org $f00&lt;br /&gt;
blitparm:				&lt;br /&gt;
				db $82,19,96,$16,$8,$08,00,00&lt;br /&gt;
blitdata:&lt;br /&gt;
				db $00,$45,$F0,$41,$E1,$01,$F7,$80,$44,$20,$40,$00&lt;br /&gt;
				db $00,$45,$00,$41,$13,$81,$04,$40,$A4,$20,$A0,$00&lt;br /&gt;
				db $00,$7D,$E0,$41,$E4,$41,$E7,$81,$14,$21,$10,$00&lt;br /&gt;
				db $00,$45,$04,$41,$07,$C1,$04,$41,$F4,$21,$F0,$00&lt;br /&gt;
				db $00,$45,$f3,$81,$04,$41,$F4,$41,$17,$BD,$10,$00&lt;br /&gt;
				db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00&lt;br /&gt;
				db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00&lt;br /&gt;
				db $F8,$8E,$F1,$C8,$BA,$1E,$04,$50,$72,$22,$3C,$F8&lt;br /&gt;
				db $81,$44,$8A,$28,$92,$11,$03,$90,$82,$45,$22,$80&lt;br /&gt;
				db $F2,$24,$F2,$0F,$92,$11,$74,$50,$73,$88,$BC,$F0&lt;br /&gt;
				db $83,$E4,$8A,$28,$92,$11,$07,$D0,$0A,$4F,$A2,$80&lt;br /&gt;
				db $82,$2E,$89,$C8,$BB,$DE,$04,$5E,$72,$28,$A2,$F8&lt;br /&gt;
				db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00&lt;br /&gt;
				db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00&lt;br /&gt;
				db $00,$00,$00,$79,$17,$81,$17,$DF,$20,$00,$00,$00&lt;br /&gt;
				db $00,$00,$00,$44,$E4,$41,$11,$10,$20,$00,$00,$00&lt;br /&gt;
				db $00,$00,$00,$45,$17,$81,$11,$1E,$20,$00,$00,$00&lt;br /&gt;
				db $00,$00,$00,$45,$F4,$41,$11,$10,$00,$00,$00,$00&lt;br /&gt;
				db $00,$00,$00,$79,$14,$40,$E1,$1F,$20,$00,$00,$00&lt;br /&gt;
&lt;br /&gt;
;4 bytes available here&lt;br /&gt;
&lt;br /&gt;
org $ff0&lt;br /&gt;
				db	$53,$65,$61,$6e,$20,$52,$69,$64,$64,$6c,$65,$20,$32,$30,$30,$34&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>83.233.129.35</name></author>	</entry>

	<entry>
		<id>http://channelf.se/veswiki/index.php?title=Main_Page&amp;diff=98</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="http://channelf.se/veswiki/index.php?title=Main_Page&amp;diff=98"/>
				<updated>2007-08-14T16:20:44Z</updated>
		
		<summary type="html">&lt;p&gt;83.233.129.35: /* Channel F Information */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Welcome to the [[Channel F|VES]] wiki! Here you can find out user-donated information on all sorts of programming info for the Channel F. __NOTOC__&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;col1&amp;quot; style=&amp;quot;width: 30%; float: right&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;border: 1px solid #666; padding: 5px; margin: 5px 0; background: #FFE;&amp;quot;&amp;gt;&lt;br /&gt;
== Channel F Information ==&lt;br /&gt;
'''Specifications:'''&lt;br /&gt;
* [[Resolution]]&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[Register]]s&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[F8]]&amp;lt;br /&amp;gt;&lt;br /&gt;
* [[RAM]]&lt;br /&gt;
* [[VRAM]]&lt;br /&gt;
'''Programming:'''&lt;br /&gt;
* [[Opcode]]s&lt;br /&gt;
* [[Accessing VRAM]]&lt;br /&gt;
* [[Reading Controllers|Reading Controller and Buttons]]&lt;br /&gt;
* [[Outputting Sound]]&lt;br /&gt;
* [[Subtraction]]&lt;br /&gt;
* [[Binary coded decimal]]&lt;br /&gt;
* [[Subroutines]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;border: 1px solid #666; padding: 5px; margin: 5px 0; background: #FFE;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Snippets ==&lt;br /&gt;
* [[Snippet:Blit|Blit subroutine]]&lt;br /&gt;
* [[Snippet:Multiblit|Multiblit subroutine]]&lt;br /&gt;
* [[Snippet:Plot|Plot subroutine]]&lt;br /&gt;
* [[Snippet:KStack|KStack advanced subroutines]]&lt;br /&gt;
* [[Snippet:Playsong|Playsong subroutine]]&lt;br /&gt;
** [[Snippet:Music_60.h|Music_60.h]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;border: 1px solid #666; padding: 5px; margin: 5px 0; background: #FFE;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Homebrews ==&lt;br /&gt;
* [[Homebrew:Lights Out|Lights Out]] by Sean Riddle&lt;br /&gt;
* [[Homebrew:Pac-Man|Pac-Man]] by [[User:Admin|Blackbird]] and [[User:E5frog|e5frog]]&lt;br /&gt;
* [[Homebrew:Fullscreenpicture|Full screen picture]] by [[User:E5frog|e5frog]]&lt;br /&gt;
* [[Homebrew:Tetris|Tetris for 1 or 2 players]] by [[Peter Trauner]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border: 1px solid #666; padding: 5px; margin: 5px 0; background: #FFE;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Disassemblies ==&lt;br /&gt;
* [[Disassembly:Bios|Channel F Bios]]&lt;br /&gt;
* [[Disassembly:Videocart 1|Videocart 1]]&lt;br /&gt;
* [[Disassembly:SABA Videoplay 1|SABA Videoplay 1]]&lt;br /&gt;
* [[Disassembly:Videocart 2|Videocart 2]]&lt;br /&gt;
* [[Disassembly:Videocart 3|Videocart 3 - Video Blackjack]]&lt;br /&gt;
* [[Disassembly:Videocart 4|Videocart 4 - Spitfire]]&lt;br /&gt;
* [[Disassembly:Videocart 5|Videocart 5 - Space War]]&lt;br /&gt;
* [[Disassembly:Videocart 6|Videocart 6 - Math Quiz]]&lt;br /&gt;
* [[Disassembly:Videocart 7|Videocart 7 - Math Quiz II]]&lt;br /&gt;
* [[Disassembly:Videocart 8|Videocart 8]]&lt;br /&gt;
* [[Disassembly:Videocart 9|Videocart 9 - Drag Race]]&lt;br /&gt;
* [[Disassembly:Videocart 10|Videocart 10 - Maze]]&lt;br /&gt;
* [[Disassembly:Videocart 10b|Videocart 10b]]&lt;br /&gt;
* [[Disassembly:Videocart 11|Videocart 11]]&lt;br /&gt;
* [[Disassembly:Videocart 12|Videocart 12 - Baseball]]&lt;br /&gt;
* [[Disassembly:Videocart 13|Videocart 13]]&lt;br /&gt;
* [[Disassembly:Videocart 14|Videocart 14 - Sonar Search]]&lt;br /&gt;
* [[Disassembly:Videocart 15|Videocart 15 - Memory Match]]&lt;br /&gt;
* [[Disassembly:Videocart 16|Videocart 16 - Dodge' It]]&lt;br /&gt;
* [[Disassembly:Videocart 17|Videocart 17 - Pinball Challenge]]&lt;br /&gt;
* [[Disassembly:Videocart 17b|Videocart 17b]]&lt;br /&gt;
* [[Disassembly:Videocart 18|Videocart 18 - Hangman]]&lt;br /&gt;
* [[Disassembly:SABA Videoplay 16|SABA Videoplay 16 - Rat' mal]]&lt;br /&gt;
* [[Disassembly:Videocart 19|Videocart 19 - Checkers]]&lt;br /&gt;
* [[Disassembly:Videocart 20|Videocart 20 - Video Whizball]]&lt;br /&gt;
* [[Disassembly:Videocart 21|Videocart 21 - Bowling]]&lt;br /&gt;
* [[Disassembly:Videocart 22|Videocart 22 - Slot Machine]]&lt;br /&gt;
* [[Disassembly:Videocart 23|Videocart 23 - Galactic Space Wars]]&lt;br /&gt;
* [[Disassembly:Videocart 24|Videocart 24 - Pro Football]]&lt;br /&gt;
* [[Disassembly:Videocart 25|Videocart 25 - Casino Poker]]&lt;br /&gt;
* [[Disassembly:Videocart 26|Videocart 26 - Alien Invasion]]&lt;br /&gt;
* [[Disassembly:SABA Videoplay 20|SABA Videoplay 20 - Schach]]&lt;br /&gt;
* [[Disassembly:Democart|Democart]]&lt;br /&gt;
* [[Disassembly:Democart 2|Democart 2]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;col2&amp;quot; style=&amp;quot;width: 69%; float: left&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Contribute! ==&lt;br /&gt;
&lt;br /&gt;
The VESWiki was set up as a repository for information related to the VES and VES programming. Some of the many things we'd like to make available are disassemblies, console or technical information, tutorials and guides for both software and hardware, code snippets, and complete games. We encourage you to add any information you have, or to make a page promoting your own game (which you can host here, if you like).&lt;br /&gt;
&lt;br /&gt;
== Getting Started ==&lt;br /&gt;
&lt;br /&gt;
If you'd like to get started programming games for the Channel F, try downloading the &amp;lt;br&amp;gt;[http://www.bingbangboom.us/productions/veswiki/images/3/3a/Devel.zip Development Pack (.zip, 4.34 MB)]. &amp;lt;br&amp;gt;It includes the DASM assembler, the MESS emulator, and two sample games (Lights Out and Pac-Man) that you can test. Read up on the guides on the left and have fun!&lt;br /&gt;
&lt;br /&gt;
== Useful pages ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.freelists.org/list/channelf Channel F Programming List]&lt;br /&gt;
* [http://members.cox.net/seanriddle/chanf.html Sean Riddle's Channel F Info]&lt;br /&gt;
* [http://members.cox.net/seanriddle/chanfmulti.html Sean Riddle's Channel F Multicart]&lt;br /&gt;
* [http://members.cox.net/seanandalicia/chanfinfo.html Sean Riddle's Channel F Programming Info]&lt;br /&gt;
* [http://www.nyx.net/~lturner/public_html/Fairchild_F8.html Lowell O. Turner's Home Page- Fairchild F8 Info]&lt;br /&gt;
* [http://www.nyx.net/~lturner/public_html/F8_ins.html Lowell O. Turner's Home Page- Fairchild F8 Instruction Set]&lt;br /&gt;
&lt;br /&gt;
== Information in pdf:s ==&lt;br /&gt;
&lt;br /&gt;
Here is a complete Guide in pdf format on how to program a F8 processor system: &amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.bingbangboom.us/productions/veswiki/images/c/ce/F8_Guide_to_Programming.pdf F8 Guide to Programming (.pdf, 3.42 MB)]&lt;br /&gt;
&lt;br /&gt;
These are a few pdf:s with shorter information on the F8 system and its circuits: &amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.bingbangboom.us/productions/veswiki/images/d/dd/F8_general_info.pdf F8 general info (.pdf, 146kB)]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.bingbangboom.us/productions/veswiki/images/0/05/F3850.pdf F3850 the CPU (.pdf, 1.49MB)]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[http://www.bingbangboom.us/productions/veswiki/images/c/c0/F3851_56.pdf F3851+56 Program Storage Unit (.pdf, 1.5MB)]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.bingbangboom.us/productions/veswiki/images/a/a4/F3852_53.pdf F3852+53 Dynamic and Static Memory Interface (.pdf, 720kB)]]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.bingbangboom.us/productions/veswiki/images/f/f2/F8_%2716_bit_uP_architecture%27%2C_Terry_Polhoff_%281979%29_info.pdf  F8 info by Terry Polhoff (.pdf, 698kB)]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>83.233.129.35</name></author>	</entry>

	</feed>