Soarer's Keyboard Controller firmware

User avatar
Muirium
µ

09 Nov 2015, 21:14

Yes. Tabs and spaces are fine. scrd makes a bit of a messy file. A lot of stuff — ifset any, ifkeyboard any, etc. — is superfluous on the controller. You're seeing a lot of default values.

andrewjoy

09 Nov 2015, 21:22

Thanks for all your help now all i need to do is fix my T key as its a different style than the others and its too high and its doing my bloody head in.

Image

Tempted to put my second APL set on it.

User avatar
Crossfire

23 Mar 2016, 21:59

Hi folks,
I've modded a model m with soarer's in a pro micro atmega32u4 successfully, now I'm trying to do the same on a 88' cherry g80-1000had. As far as the connection goes, all four - data, clock, vcc and gnd are correctly connected. Pro micro is flashed with arduino builder, it's runnung on soarer's 1.11 version - again correctly and working.

When triggering the switches nothing happens, when testing led's in aqua test, they work.

Now, do I have to manually configure each switch or what's the key to configure the .sc file to work with this good old cherry board. Does anyone have an idea?

User avatar
Halvar

23 Mar 2016, 22:12

You should not have to configure anything normally, as the G80-3000 has a standard layout. Can you post what hid_listen prints when you connect the converter (with keyboard connected) to the computer?

User avatar
Crossfire

23 Mar 2016, 22:37

it posts:
Keyboard id: AB83
Code set: 2 (extended)
Mode: AT/PS2

And some random chars

wED rFA w00 rFA

User avatar
Halvar

23 Mar 2016, 23:57

OK, that's what's expected. The keyboard is recognized to be an AT/PS2 model. In that case I've no idea what's wrong, sorry.

Do more "random" characters appear when you press keys?

If so:
Maybe you could try to send an empty config file? Was the ProMicro used before for something else?

If not:
Do you have another PS/2->USB converter or old computer that you could use to test if the keyboard is ok?

User avatar
Crossfire

24 Mar 2016, 18:10

Spoiler:
Nothing registers when I'm pressing the switches...it all happens when I connect the board to a usb slot.

Guess I'll just solder on the old at/ps2 connector and test it out...don't have time to tinker with the straight forward problem of an 20$ board :) 4 hours yesterday was enough :/

edit: the pcb doesn't respond even with original at cable...so that's it i guess :)
edit II.: because I've changed the vintage blacks (another project) with new mx blues there was a problem but hidden from my eyes...until today :) putting the old diodes in the new switches solved my problem, soarers works flawlessly and the good old g80-1000 is back in the game, tailored to new age standards of programmability ;)

NBRED

19 Jun 2016, 20:38

I've created my configuration files, and loaded your atmega32u4 firmware onto my teensy 2.0. I can't figure out how to use scas.exe to convert the configuration files to binary. I feel like I'm missing something fairly simple here. Thanks soarer for all your work in this firmware!

User avatar
Crossfire

19 Jun 2016, 20:48

You just drop that .txt or .sc file into the scaswr batch file. Command line appears and if it successfully finishes you're done.

User avatar
Nuum

19 Jun 2016, 20:52

Drag and drop your config onto the scaswr.bat in the file manager window.

User avatar
Nuum

02 Sep 2016, 17:44

I'm trying to use Soarers Controller with a Teensy++ 2.0 for my IBM 5140 keyboard. I used the same config as copter did in his thread: workshop-f7/ibm-5140-convertible-conver ... ml#p282477
I adapted his code to my wiring, but when flashing with scaswr.bat I get an error message with scwr: "Sending information request: failed" or an "err 2: file not found on the device"

Does anyone have an idea why this happens?

I accidentally used D6 (Pin with LED), but that should affect the flashing, right?

User avatar
Nuum

03 Sep 2016, 16:44

After desoldering the Teensy from the keyboard flashing with scaswr.bat works, but still only every third or so time. Odd.

User avatar
solkoseryl

01 Oct 2016, 17:35

Nuum wrote: After desoldering the Teensy from the keyboard flashing with scaswr.bat works, but still only every third or so time. Odd.
Faulty Teensy, maybe?

User avatar
Nuum

01 Oct 2016, 19:19

Most probably yes, in the meantime I tried flashing other firmwares and nothing works properly. It works for a few seconds after connecting and then crashes. So if I e.g. use Soarer's controller I can type for a few seconds and then keys get stuck randomly for a few more seconds before it completely stop working.

Any idea to somehow "reset" the teensy in case something is wrong with the bootloader or something?

User avatar
solkoseryl

01 Oct 2016, 21:25

Have you tried to isolate the D6 pin from the rest of the scheme and take a look how everything will go in that case? Because I was told that using the LED pin could lead to instablility in the work of Teensy.

User avatar
Nuum

01 Oct 2016, 21:37

Yup, I did.

User avatar
alh84001
v.001

24 Nov 2016, 12:47

Forgive me if this has been asked, but an idea popped into my mind, and I want someone to squash it if it's not plausible.

I know this controller can be used with Bigfoot in conjunction with the original controller, as it basically has no logic on it. Did anyone attempt to do the same with Displaywriter boards (either beam spring or buckling spring) or even blue switch model Fs (3178)? I'm not sure if the same mechanism can be used as for Bigfoots, but my dumb reasoning is that cables and pin count is similar, so it might be possible.

I'm asking because it would be nice to skip the whole kerfuffle with getting a beam spring Displaywriter controller. I just converted my buckling spring Displaywriter and 3178 board yesterday using xwhatsit's controller and the ship has sailed on those :)

P.S. It begs repeating, Soarer is really missed.

User avatar
alh84001
v.001

24 Nov 2016, 13:37

As opposed to Bigfoot which has parallel data lines, Displaywriter has a serial data line. I suppose this means that Soarer's controller can't be configured for that, but it doesn't rule out custom converter.

Some pics from http://bitsavers.trailing-edge.com/pdf/ ... _Feb83.pdf

Image
Image
Image

(Type A is beam spring, Type B is buckling spring)
Last edited by alh84001 on 24 Nov 2016, 14:29, edited 1 time in total.

User avatar
Wodan
ISO Advocate

24 Nov 2016, 13:42

There's a user from Austria who has reverse engineered the soarer converter. Don't think he's taken on the soarer controller yet ...

His username is Arakula and he's been desperate to get in touch with Soarer as well. Maybe get in touch with him for more details :)

User avatar
seebart
Offtopicthority Instigator

24 Nov 2016, 13:43

Wodan wrote: There's a user from Austria who has reverse engineered the soarer converter. Don't think he's taken on the soarer controller yet ...

His username is Arakula and he's been desperate to get in touch with Soarer as well. Maybe get in touch with him for more details :)
Great idea.

User avatar
alh84001
v.001

24 Nov 2016, 14:31

Yeah. I remember that he managed to get 8Mhz version working. I'll try, but I contacted hasu first, as it seems to me that TMK could handle it.

Arakula

24 Nov 2016, 17:25

That was the Converter, not the Controller. I have reverse-engineered the Controller V1.20 beta4, too, but that's still 100% untested. If you want the code, PM me. The big question is - how should that help in this context? I'm not the hardware guru that's needed here, Soarer was ... so yes, I'd really still love to get in touch with him.

User avatar
alh84001
v.001

24 Nov 2016, 21:59

Yeah, I know. And I would love to try and tackle it, but unfortunately, the idea didn't occur to me until after I did a controller swap. Right now I don't have hardware to test it with (unless someone want to donate a Displaywriter board for keyboard science ;)), so until I get another board, me accessing the code would only serve to scratch my curiosity itch.

User avatar
alh84001
v.001

04 Jan 2017, 03:45

Nuum wrote: I'm trying to use Soarers Controller with a Teensy++ 2.0 for my IBM 5140 keyboard. I used the same config as copter did in his thread: workshop-f7/ibm-5140-convertible-conver ... ml#p282477
I adapted his code to my wiring
I'm trying to do the same, and I almost got it. One issue I have is with column 6 (F5, 5, T, G, B, Space). When I press any key in that column, I get presses registered for every key in the same row in which the pressed key is. That column is connected to PD3. Here's my config file, which is based on copter's so there's nothing out of the ordinary:

Code: Select all

ifset any
ifkeyboard any
ifselect any
matrix
   scanrate 1
   strobe_mode 0
   sense_polarity 0
   debounce 5
   blocking 1
   debounce_method 0
   sense_delay 1
   sense  PF7 PF6 PF5 PF4 PF1 PF0
   strobe PB0 DELETE BACKSPACE UNASSIGNED UNASSIGNED UNASSIGNED RIGHT
   strobe PB1 INSERT BACKSLASH UNASSIGNED ENTER FN2 DOWN
   strobe PB2 NUM_LOCK MINUS LEFT_BRACE QUOTE RSHIFT UP
   strobe PB3 F10 0 P SEMICOLON SLASH LEFT
   strobe PB5 F3 3 E D C UNASSIGNED
   strobe PB6 F4 4 R F V UNASSIGNED
   strobe PB7 F9 9 O L PERIOD RALT
   strobe PD0 F8 8 I K COMMA UNASSIGNED
   strobe PD1 F7 7 U J M UNASSIGNED
   strobe PD2 F6 6 Y H N UNASSIGNED
   strobe PD3 F5 5 T G B SPACE
   strobe PD4 F2 2 W S X LALT
   strobe PD5 SCROLL_LOCK EQUAL RIGHT_BRACE UNASSIGNED UNASSIGNED UNASSIGNED
   strobe PD6 ESC BACK_QUOTE TAB CAPS_LOCK LSHIFT LCTRL
   strobe PD7 F1 1 Q A Z FN1
end

layerblock
   FN1 1
endblock

remapblock
layer 1
   LEFT HOME
   RIGHT END
   UP PAGE_UP
   DOWN PAGE_DOWN
   LCTRL LGUI
   FN2 PRINTSCREEN
   NUM_LOCK PAUSE
endblock

Edit: I got it workng. I actually did two things:
1) I rewired the column to another pin on Teensy (PB4)
2) I put a bit of electrical tape on the mini-USB cable connector. I had to thin the connector with a Dremel earlier, and I exposed a tiny bit of shielding. It's possible it touched a pin or two around the spacebar position, so it might have caused some electrical issues.

I think it's more probable that the second thing worked. In any case, it's nice to have it working, I typed this edit on it :)

K-rnix

03 Feb 2017, 03:59

Hi. Sorry for being such a noobie. I have a Teensy 2++ board. I'm trying to have a Ti-99/4A working keyboard. Thing is, I do not know how to program the Teensy with the config file (.sc) I've created. I have downloaded the Soarer files, including the *AT90USB1286.hex file, and the teensy.exe, but I don't know how to "merge" my .sc with the .hex in order to have my custom .hex file for programming the Teensy.
Anyone who could guide me? Thanks.

JBert

09 Feb 2017, 02:02

@K-rnix: it doesn't need merging.

Open the Teensy programming software and use it to program your Teensy++ with the AT90USB1286.hex.

Then go to the tools directory in Soarer's controller folder and extract the tools for your operating system (Windows, mac, Linux), then copy your .sc file into the same folder as those programs.

Now run the following:
  • scas myconfig.sc compiled.bc
    Check that no errors are shown.
  • scwr compiled.bc
If both commands completed successfully your config is uploaded to the Teensy and ready for use.

K-rnix

18 Apr 2017, 20:05

Thanks JBert. Now is all working. I have an issue tough:
I'm trying with a Commodore 64 keyboard, but I cannot get the remapping block to work when I try to use if_select in order to switch between PC mode and emulator mode (VICE positional).
the scaswr command says "error at line 315: invalid command". is the "endblock" of the remapblock. Why? I don't know... same thing if I put the remapblock somewhere else.
I use the NUM_LOCK as SELECT_1 (so I can know what mode is on by looking at the LED)
This is the sc file:

Code: Select all

# Matrix setup for COMMODORE 64

led caps -PB5
led num -PB6	
led scroll -PB4

matrix
	scanrate 1
	debounce 5
	blocking 1

	sense			PC0			PC1			PC2			PC3			PC4			PC5			PC6			PC7			PE0
	strobe	PF0		1			ESC			LCTRL		RALT		SPACE		LGUI		Q			2			UNASSIGNED
	strobe	PF1		3			W			A			LSHIFT		Z			S			E			4			UNASSIGNED
	strobe	PF2		5			R			D			X			C			F			T			6			UNASSIGNED
	strobe	PF3		7			Y			G			V			B			H			U			8			UNASSIGNED
	strobe	PF4		9			I			J			N			M			K			O			0			UNASSIGNED
	strobe	PF5		LANG_1		P			L			COMMA		PERIOD		LANG_3		LANG_4		MINUS		UNASSIGNED
	strobe	PF6		BACKSLASH	LANG_2		SEMICOLON	SLASH		RSHIFT		EQUAL		UP			HOME		UNASSIGNED
	strobe	PF7		BACKSPACE	ENTER		RIGHT		DOWN		F1			F3			F5			F7			UNASSIGNED
	strobe	PB0		UNASSIGNED	UNASSIGNED	UNASSIGNED	UNASSIGNED	UNASSIGNED	UNASSIGNED	UNASSIGNED	UNASSIGNED	END
end

ifselect any

macroblock

	macro F5 LGUI LSHIFT	 	#NUM_LOCK
		PUSH_META CLEAR_META ALL
		PRESS NUM_LOCK
		PRESS SELECT_1
		POP_ALL_META
	endmacro

endblock

macroblock
			
	macro F3 LGUI SHIFT	#CAPS_LOCK
		PUSH_META CLEAR_META ALL
		PRESS CAPS_LOCK
		POP_ALL_META
	endmacro

	
	macro F7 LGUI SHIFT	#SCROLL_LOCK
		PUSH_META CLEAR_META ALL
		PRESS SCROLL_LOCK
		POP_ALL_META
	endmacro

endblock
		
macroblock

	macro RIGHT SHIFT			#LEFT
		PUSH_META CLEAR_META ALL
		PRESS LEFT
		POP_ALL_META
	endmacro

	macro DOWN SHIFT			#UP
		PUSH_META CLEAR_META ALL
		PRESS UP
		POP_ALL_META
	endmacro


	macro HOME SHIFT			#PAGE UP
		PUSH_META CLEAR_META ALL
		PRESS PAGE_UP
		POP_ALL_META
	endmacro
	
	macro END SHIFT			#PAGE DOWN
		PUSH_META CLEAR_META ALL
		PRESS PAGE_DOWN
		POP_ALL_META
	endmacro
	
	macro BACKSPACE SHIFT			#DELETE
		PUSH_META CLEAR_META ALL
		PRESS DELETE
		POP_ALL_META
	endmacro
	
endblock	

macroblock	
	
	macro 2 SHIFT				#2
		PUSH_META CLEAR_META ALL
		MAKE LSHIFT
		PRESS QUOTE
		BREAK LSHIFT
		POP_ALL_META
	endmacro

	macro 6 SHIFT				#6
		PUSH_META CLEAR_META ALL
		MAKE LSHIFT
		PRESS 7
		BREAK LSHIFT
		POP_ALL_META
	endmacro

	macro 7 SHIFT				#7
		PUSH_META CLEAR_META ALL
		PRESS QUOTE
		POP_ALL_META
	endmacro

	macro 8 SHIFT				#8
		PUSH_META CLEAR_META ALL
		MAKE LSHIFT
		PRESS 9
		BREAK LSHIFT
		POP_ALL_META
	endmacro

	macro 9 SHIFT				#9
		PUSH_META CLEAR_META ALL
		MAKE LSHIFT
		PRESS 0
		BREAK LSHIFT
		POP_ALL_META
	endmacro
	
	macro LANG_1				#+
		PUSH_META ASSIGN_META LSHIFT
		PRESS EQUAL
		POP_META
	endmacro
	
	macro MINUS SHIFT			#-
		PUSH_META ASSIGN_META LSHIFT
		PRESS MINUS
		POP_META
	endmacro	

endblock

macroblock #Teclas_nulas
	
	macro 0 SHIFT				#0
		PUSH_META CLEAR_META ALL
		PRESS 0
		POP_ALL_META
	endmacro

	macro LANG_1 SHIFT			#+
		PUSH_META CLEAR_META ALL
		POP_ALL_META
	endmacro

	macro LANG_4 SHIFT			#@
		PUSH_META ASSIGN_META LSHIFT
		PRESS 2
		POP_META
	endmacro

	macro LANG_2 SHIFT			#*
		PUSH_META CLEAR_META ALL
		POP_ALL_META
	endmacro

	macro EQUAL SHIFT			#=
		PUSH_META CLEAR_META ALL
		PRESS EQUAL
		POP_ALL_META
	endmacro
	
endblock

macroblock

	macro LANG_4				#@
		PUSH_META ASSIGN_META LSHIFT
		PRESS 2
		POP_META
	endmacro

	macro LANG_2				#*
		PUSH_META ASSIGN_META LSHIFT
		PRESS 8
		POP_META
	endmacro
	
	macro SEMICOLON SHIFT		#]
		PUSH_META CLEAR_META ALL
		PRESS RIGHT_BRACE
		POP_ALL_META
	endmacro
	
	macro LANG_3 SHIFT			#[
		PUSH_META CLEAR_META ALL
		PRESS LEFT_BRACE
		POP_ALL_META
	endmacro

	macro LANG_3				#:
		PUSH_META ASSIGN_META LSHIFT
		PRESS SEMICOLON
		POP_META
	endmacro

endblock

macroblock

	macro F1 LSHIFT				#F2
		PUSH_META CLEAR_META ALL
		PRESS F2
		POP_ALL_META
	endmacro

	macro F3 LSHIFT				#F4
		PUSH_META CLEAR_META ALL
		PRESS F4
		POP_ALL_META
	endmacro

	macro F5 LSHIFT				#F6
		PUSH_META CLEAR_META ALL
		PRESS F6
		POP_ALL_META
	endmacro

	macro F7 LSHIFT				#F8
		PUSH_META CLEAR_META ALL
		PRESS F8
		POP_ALL_META
	endmacro

	macro F1 RSHIFT				#F9
		PUSH_META CLEAR_META ALL
		PRESS F2
		POP_ALL_META
	endmacro

	macro F3 RSHIFT				#F10
		PUSH_META CLEAR_META ALL
		PRESS F4
		POP_ALL_META
	endmacro

	macro F5 RSHIFT				#F11
		PUSH_META CLEAR_META ALL
		PRESS F6
		POP_ALL_META
	endmacro

	macro F7 RSHIFT				#F12
		PUSH_META CLEAR_META ALL
		PRESS F8
		POP_ALL_META
	endmacro
		
	
endblock

macroblock
	macro SPACE SHIFT		#TAB
		PUSH_META CLEAR_META ALL
		PRESS TAB
		POP_ALL_META
	endmacro
	
	macro SPACE ALT		#ALT-TAB
		PUSH_META CLEAR_META ALL
		MAKE LALT
		PRESS TAB
		PRESS TAB
		BREAK LALT
		POP_ALL_META
	endmacro

	macro BACKSPACE LSHIFT RSHIFT	#ALT-CTRL-DEL
		PUSH_META CLEAR_META ALL
		MAKE LALT
		MAKE LCTRL
		PRESS DELETE
		BREAK LCTRL
		BREAK LALT
		POP_ALL_META
	endmacro	

	macro F3 ALT		#ALT-F4
		PUSH_META CLEAR_META ALL
		MAKE LALT
		PRESS F4
		BREAK LALT
		POP_ALL_META
	endmacro
	
endblock
	
ifselect 1

remapblock
	ESC BACK_QUOTE
	LCTRL TAB
	RALT ESC
	LGUI LCTRL
	LANG_1 MINUS
	LANG_3 SEMICOLON
	LANG_4 LEFT_BRACE
	MINUS EQUAL
	BACKSLASH INSERT
	LANG_2 RIGHT_BRACE
	SEMICOLON QUOTE
	EQUAL BACKSLASH
	UP DELETE
	END PAGE_UP
endblock

K-rnix

18 Apr 2017, 22:19

I think I've found a bug: END

JBert

19 Apr 2017, 14:44

You seem to be right, the END keycode on the next to last line is triggering an error.

I'm afraid that can't be solved without fixing sctools and rebuilding them. The quickest solution is likely to pick another key and bind that to PAGE_UP if possible.

K-rnix

04 May 2017, 21:56

Thank you JBert. I did some workaround the bug and got it working.
Now I'm facing have another challenge: Giving the fact I'm using a Commodore 64 keyboard, I'm looking for a way to toggle between C64 mode and PC Mode. Mostly because I'm using Positional mode in VICE Emulator (most "pure" emulation). I'm planning to use the NUM_LOCK LED to indicate C64 mode is ON. Problem is I cannot tell if NUM_LOCK was ON already when I switch to C64 mode (some motherboards boot with NUM_LOCK on, another keyboard could be connected). If that is the case, even if C64 mode is working I have the LED light inverted.
You can see my attempt in the "ifselect any" following macroblock with F5 LGUI and LSHIFT macro.

So, is there a way to know the NUM_LOCK status (or SCROLL_LOCK for that matter)? AND/OR, is there a way to turn it off (instead of "toggling it") so I can be sure that is OFF before toggle it?
Thanks for your support.

Post Reply

Return to “Workshop”