Commit graph

6309 commits

Author SHA1 Message Date
cinap_lenrek b715c39bfa bcm: simplify reboot code
- synchronize rebootcode installation
- handle the 1MB identity map in mmu.c (mmuinit1())
- do not overlap CONFADDR with rebootcode, the non boot
  processors are parked there.
- make REBOOTADDR physical address
2018-10-28 06:16:10 +01:00
cinap_lenrek 0fc2adb43d bcm: cleanup clock code
- disable local clock on interrupt to prevent accidents when reenabling
- always regitster local clock interrupt handler, even for cpu0
- simplify microdelay()
- don't mess with watchdog
2018-10-28 06:09:05 +01:00
cinap_lenrek f17a5cc2cf bcm: fix l2 cache maintenance routines for raspi3 (armv8)
armv8 has 16-way l2, so adjust shift for the set-way cache
tag format.
2018-10-28 06:05:43 +01:00
qwx d74fdfc022 misc small manpage fixes 2018-10-28 00:05:05 +02:00
cinap_lenrek 2ee4c08974 devuart: don't sleep in uartdrainoutput() when called splhi or without a process
uartdrainoutput() might be called in early initialization
from uartctl() without a process.
2018-10-27 20:00:12 +02:00
cinap_lenrek d81f4d4866 rc: skip searchpath for "", "." and ".." 2018-10-27 18:32:00 +02:00
cinap_lenrek d17a049c5b rc: use searchpath() logic to handle $cdpath 2018-10-26 10:25:23 +02:00
cinap_lenrek 1a55b8d1f0 rc: ignore $cdpath for # device rooted paths (thanks kivik) 2018-10-26 09:52:05 +02:00
23hiro 05021e0579 add Centrino Wireless-N 1030 (thanks lksmk from brazil) 2018-10-25 08:09:10 +02:00
cinap_lenrek b65a5a1ca5 /sys/lib/dist/mkfile: add pi.img target for raspi sdcard image 2018-10-22 00:16:04 +02:00
cinap_lenrek f059563b9d add /sys/src/boot/bcm/mkfile to download raspberry pi bootcode firmware 2018-10-22 00:15:39 +02:00
cinap_lenrek 8dfff00e50 nusb/serial: add support for CH340 serial converter 2018-10-21 17:24:33 +02:00
cinap_lenrek 21001d4294 merge 2018-10-21 03:44:16 +02:00
cinap_lenrek 2fd35e9bf8 kbdfs: don't get confused by broken utf8 2018-10-21 03:42:24 +02:00
qwx f5c6a870bf doom: fix music for patch wads
revert last change, which used games/wadfs to expose genmidi and music lumps.
replacements from patch wads were never seen that way.  instead, write genmidi
and music lumps to /tmp and play them from there.
2018-10-21 00:11:39 +02:00
cinap_lenrek b4eb667f02 acme: fix fd checks - initialize Window.rdselfd to -1 not 0 2018-10-20 23:57:50 +02:00
BurnZeZ 84e019aba3 fix misleading/wrong fd checks 2018-10-20 18:44:09 +00:00
cinap_lenrek 292cce2ad1 libdisk: catch null bytes in proto file, fix memory leaks 2018-10-20 20:32:22 +02:00
cinap_lenrek 5bb7240ee9 nusb/kb: work arround broken split transaction on raspi's dwc otg usb controller 2018-10-20 19:57:37 +02:00
cinap_lenrek 83e20b4df1 bcm: import changes for raspi2/3 from richard miller 2018-10-20 19:56:31 +02:00
cinap_lenrek 796e5e6000 nusbrc: support for raspi3 ethernet 2018-10-20 19:53:57 +02:00
cinap_lenrek 37dcb25eee kernel: fix allocb for BLOCKALIGN*2 >= Hdrspc 2018-10-20 19:52:54 +02:00
cinap_lenrek c4ec69045e devusb: use Enotconf[] string constant 2018-10-20 19:41:37 +02:00
cinap_lenrek 86a9f92f47 nusb/ether: add support for lan78xx (raspi3) (thanks richard miller) 2018-10-20 19:30:16 +02:00
cinap_lenrek 29865005f9 nusb/ether: tune buffer size parameters for SMSC ethernet (raspi) (thanks richard miller) 2018-10-20 19:29:18 +02:00
mischief 499478eb62 upas/fs: delete extra binaries 2018-10-18 08:46:44 -07:00
mischief 286ee3ba34 truetypefs(4): fix example path 2018-10-16 12:53:55 -07:00
mischief 717fa414af kbdfs(8): fix nit 2018-10-16 12:53:34 -07:00
aiju d6164606d9 ttf: SHZ also uses 0x36 2018-10-16 19:26:40 +00:00
aiju 4b507ed83d libttf: add SHZ[] instruction 2018-10-16 19:14:19 +00:00
aiju d31f6261b3 libttf: dont unset LOOP in SHC 2018-10-16 18:35:47 +00:00
mischief 2d221e61e3 nusb/disk: also drive usb attached scsi devices 2018-10-15 04:14:59 -07:00
aiju 22fc5467a4 nusb/joy: update misleading comment (thanks Tobias Heinecke) 2018-10-15 10:10:34 +01:00
mischief df89d898f0 libttf: instruction 0x24 is DEPTH, not CLEAR 2018-10-13 02:20:31 -07:00
cinap_lenrek c22ebef4e1 libdisk: back out last change 2018-10-13 00:07:46 +02:00
cinap_lenrek 06abb1098a ssh: fix spinning due to sticky intr flag on connection timeout 2018-10-12 19:28:39 +02:00
cinap_lenrek f12f773944 merge 2018-10-12 19:04:22 +02:00
cinap_lenrek 6e74c7380f libdisk: check for proper line termination in proto file parser 2018-10-12 19:02:57 +02:00
mischief c60ba7267d namespace(4): fix $home bin paths 2018-10-12 08:47:52 -07:00
mischief aa35643207 namespace(4): document new TrueType path, drop unused Hershey fonts path 2018-10-12 08:46:48 -07:00
mischief d5fae54268 truetypefs(4): document truetypefs 2018-10-12 08:36:22 -07:00
mischief aec4240c0c truetypefs: fall back to width if advance is zero
combining marks will have zero advance, but it results in zero-width
glyphs in subfonts.  fall back to width so something meaningful is
rendered even if its not combined properly.
2018-10-12 08:34:17 -07:00
mischief 3a41ce3bf3 truetypefs: fix subfont indices (thanks aiju!) 2018-10-12 08:32:19 -07:00
mischief 4d919ab612 truetypefs: use /lib/font/ttf as default font path 2018-10-12 08:31:05 -07:00
aiju ccfb6f4126 libttf: fix swapped argument in vscan()... 2018-10-12 11:40:34 +00:00
cinap_lenrek 4808971db6 plumber: fix memory and filedescriptor leaks (thanks BurnZeZ) 2018-10-11 22:49:45 +02:00
cinap_lenrek c9e86d6b34 ndb/dnstcp: only lookup the expected address type in findserver()
theres no reason to lookup both A and AAAA records, as we already
know the type of srcip.
2018-10-11 18:57:14 +02:00
cinap_lenrek 5fbf53b467 merge 2018-10-11 18:34:14 +02:00
cinap_lenrek ed888f3ee9 ndb/dns: use nil for pointers in dnresolve() args 2018-10-11 18:32:31 +02:00
cinap_lenrek 784a959888 ndb/dns: do recursive lookup for dnsslave= 2018-10-11 18:31:35 +02:00
cinap_lenrek fce9c3e65a ndb/dns: avoid format strings in procname 2018-10-11 18:29:17 +02:00
aiju 921b75a909 games/gb: when the LCD is turned off, reset ppuy and ppustate to 0, fixes bug in dragon warriors iii reported by mischief 2018-10-11 16:25:11 +00:00
mischief 8eecdc9664 etheriwl: support type 2000 devices and the 2200 chip in x230t 2018-10-10 16:37:13 -07:00
mischief 7af5442d3b nusb/joy: send magic packet to enable playstation controller events 2018-10-10 13:56:28 -07:00
mischief 67e14807e9 nusbrc: prevent nusb/kb from attaching to sony ps3 controller 2018-10-10 13:49:03 -07:00
cinap_lenrek e73ce8475e ndb/dnstcp: return a proper non-answer when rejecting zone transfer 2018-10-09 06:34:27 +02:00
cinap_lenrek 08292c8f1f ndb/dns: fix format print warning for procsetname(), cleanup 2018-10-09 06:08:48 +02:00
cinap_lenrek 45e71cb728 ndb/dns: send_notify() to multiple ip addresses in parallel, filter myip() 2018-10-09 06:07:51 +02:00
cinap_lenrek 7ddda493c0 ndb/dnstcp: restrict DNS zone transfers to clients listed as dnsslave=
initial idea from Steve Simon, but doesnt require reverse
lookup of the callers ip address.
2018-10-09 06:02:36 +02:00
cinap_lenrek 679a253931 usbxhci: only clear RW1C bits when set. 2018-10-08 07:10:59 +02:00
cinap_lenrek 2fecc5789e usbxhci: delay after reset, preserve reserved bits in legacy status control register in handoff()
when clering smi enable bits in the legacy control/status register,
preserve the reserved bits. clear the RW1C bits.

linux code claims intel xhci controller needs a 1ms delay before
accessing any register after reset.
2018-10-08 07:05:28 +02:00
cinap_lenrek a71a57f8f2 remove /lib/tftpd from proto file 2018-10-08 02:18:02 +02:00
cinap_lenrek 564eeba515 get rid of /lib/tftpd 2018-10-08 02:13:29 +02:00
cinap_lenrek 065c3557af ip/dhcpd, ip/tftpd: change default for tftp homedir to / 2018-10-08 02:11:36 +02:00
cinap_lenrek c458216121 pc drivers: more pci cleanup 2018-10-07 23:38:41 +02:00
cinap_lenrek 9fec0e7360 pc drivers: use pcienable() to handle device power up and missing initialization 2018-10-07 22:28:21 +02:00
cinap_lenrek 4d7c195804 pc, pc64: add pcienable() and pcidisable() functions
pcienable() puts a device in fully powered on state
and does some missing initialization that UEFI might
have skipped such as I/O and Memory requests being
disabled.

pcidisable() is ment to shutdown the device, but
currently just disables dma to prevent accidents.
2018-10-07 21:52:53 +02:00
aiju 4e4f2aca32 add (unfinished but working) truetypefs 2018-10-07 11:11:39 +00:00
cinap_lenrek ce062debb1 9boot: get rid of 64 byte line length limit 2018-10-06 02:42:53 +02:00
cinap_lenrek e5cb695c7a merge 2018-10-06 00:30:59 +02:00
cinap_lenrek f9839ed0a2 usbehci, usbxhci: add *noehcihandoff= and *noxhcihandoff= parameters
on Samsung ATIV Smart PC Pro XE00T1C-A01CL, the EHCI handoff
causes the system to freeze in UEFI mode as soon as we assert
the os semaphore bit.

until a general solution is found, provide these parameters to
disable the handoff for now as it seems to otherwise work fine.
2018-10-06 00:29:05 +02:00
cinap_lenrek 83876083c9 pc, pc64: increase CONFADDR buffer from 4K to 24K
move APBOOTSTRAP and TMPADDR to make space available for
boot parameters. which can become quite long such as *e820.
2018-10-06 00:26:07 +02:00
stanley lieber 7efc2e761d fortunes: I'm beginning to wonder if anyone is left that isn't part of 9front? -- Steve Stallion 2018-10-04 23:23:50 -04:00
cinap_lenrek b56450471f devip: remove unused QLock from udp and icmpv6 control blocks (thanks brho) 2018-10-03 00:47:34 +02:00
cinap_lenrek bdcef9d692 5i ki qi vi: avoid buffer overflow in command read loop 2018-09-29 13:58:08 +02:00
mischief e876447b75 audio/libogg: sync to ogg v1.3.3
this corresponds to upstream git commit 4380566a44b8d5e85ad511c9c17eb04197863ec5.
2018-09-28 17:28:51 -07:00
aiju f75bbcdd45 5e: byte access incorrectly checked for long; brk has to round up addresses 2018-09-28 22:53:24 +00:00
cinap_lenrek 451b0c7976 ip/ipconfig: silently ignore prefix information with Autonomous flag clear 2018-09-28 20:23:53 +02:00
cinap_lenrek 9ee967663f ip/ipconfig: default onlink and autoflag to 1 2018-09-28 18:16:08 +02:00
cinap_lenrek 02b867f01e devip: only add interface route for "on-link" prefixes
when a prefix is added with the onlink flag clear, packets
towards that prefix needs to be send to the default gateway
so we omit adding the interface route.

when the on-link flag gets changed to 1 later, we add the
interface route.

the on-link flag is sticky, so theres no way to clear it back
to zero except removing and re-adding the prefix.
2018-09-28 18:13:01 +02:00
cinap_lenrek 03bcc1520a vt: fix backup/forward after resize 2018-09-27 16:08:51 +02:00
cinap_lenrek b74ce50a1c vt: implement word select 2018-09-27 15:24:41 +02:00
cinap_lenrek e7f777ae03 idn(2): add documentation for idn2utf() and utf2idn() 2018-09-26 15:58:19 +02:00
cinap_lenrek a600610fde provide procsetname(2) manpage 2018-09-26 15:24:29 +02:00
cinap_lenrek 19166f2cf3 libc: add procsetname() 2018-09-26 14:56:23 +02:00
cinap_lenrek 311e3b51c6 libc: return number of bytes produced for idn2utf() and utf2idn() 2018-09-26 14:32:17 +02:00
cinap_lenrek f18e8dfde8 ip/ipconfig: increase maximum host and domainname size to 255 bytes. idn for -h option 2018-09-25 21:51:57 +02:00
cinap_lenrek 0126f10d05 ndb/inform: handle internationalized domain names 2018-09-25 20:59:08 +02:00
cinap_lenrek e5e6a729dd merge 2018-09-25 20:45:11 +02:00
cinap_lenrek 33682a5885 ip/ipconfig: handle internationalized domain names 2018-09-25 20:43:37 +02:00
cinap_lenrek 05f6c08985 ip/dhcp6d: handle internationalized domain names 2018-09-25 20:28:19 +02:00
cinap_lenrek 347303b136 ip/dhcpd: handle internationalized domain names 2018-09-25 20:17:56 +02:00
cinap_lenrek 2160da07de ndb/dns: use libc's new idn functions 2018-09-25 20:17:00 +02:00
cinap_lenrek 565fc2be5d webfs: remove idn.c 2018-09-25 20:16:06 +02:00
cinap_lenrek d5f2d2cc3f webfs: fix memory leak in Nfmt(), use libc's new idn functions 2018-09-25 20:15:24 +02:00
cinap_lenrek dfec09c436 libc: add utf2idn() and idn2utf() functions to deal with internationalized domain names 2018-09-25 20:14:25 +02:00
cinap_lenrek d2b3e2f55a merge 2018-09-25 15:06:13 +02:00
cinap_lenrek dbfb766735 ip/dhcpd: implement rfc3397 dhcp search domain option (dnsdomain) 2018-09-25 15:04:19 +02:00
cinap_lenrek 12b3c82014 ip/ipconfig: implement rfc3397 dhcp dns search option (dnsdomain) 2018-09-25 15:02:29 +02:00
Ori Bernstein 72a840b31d Disallow '/' in file names.
A bad rename call could send a path with a '/' to cwfs.
	This is invalid, and should be disallowed.
2018-09-25 01:02:31 -07:00
cinap_lenrek 2f076f946f ip/ipconfig: handle noconfig flag for router advertisement, add debug prints, cleanup 2018-09-24 13:56:25 +02:00
cinap_lenrek ef17043327 libhtml: increase Nestmax to render some convoluted pages (thanks fernan)
example page with broken citation list numbering:

https://en.m.wikipedia.org/wiki/Commodore_64
2018-09-23 23:35:41 +02:00
cinap_lenrek 94333ce6a6 devip, ipconfig: avoid overflow on lifetime checks 2018-09-23 22:07:56 +02:00
cinap_lenrek 70c6bd0397 devip: valid and prefered life-time should be unsigned, add remove6 ctl command 2018-09-23 19:09:48 +02:00
cinap_lenrek 4a92a8f6b2 devip: fix default parameter calculation for router life-time
router life time is in seconds, while max ra interval is
in milliseconds!
2018-09-23 19:08:16 +02:00
cinap_lenrek 259ce5e3de devip: make updating ra6 router parameters atomic
when we fail to parse and validate the command, no update
should take place.
2018-09-23 17:24:59 +02:00
cinap_lenrek 1d4a36c699 ip/ipconfig: valid lifetime is in seconds, not milliseconds. 2018-09-23 17:14:29 +02:00
cinap_lenrek 74272a8364 ip/ipconfig: remove expired default routes on router advertisement 2018-09-23 02:08:59 +02:00
23hiro 0311f01122 keyboard(2) spelling (thanks Amavect) 2018-09-22 09:41:16 +02:00
cinap_lenrek 8c7a4e28d5 vt: make selecting() wait until all buttons are lifted avoiding menu when chording 2018-09-20 21:25:38 +02:00
cinap_lenrek b9796e0774 vt: implement line selection by double click 2018-09-20 21:07:10 +02:00
mischief 6fa3e08412 cfs: close mount half of pipe, fixes cfs not exiting when unmounted 2018-09-19 13:27:55 -07:00
cinap_lenrek 45afecffd1 kprof: fix precedence (thanks geoff) 2018-09-19 01:11:49 +02:00
mischief d73c67660b sum, md5sum, sha1sum: set exit status properly on open/read errors 2018-09-18 15:58:22 -07:00
mischief 026c679f49 webfs: remove automatic Referer header
automatic Referer headers were found to break downloads from
sourceforge.net, causing html pages to appear instead of tarballs.

if a website does need them, they can be added as needed via hget's -r
flag, or added to mothra.

reverts commits 67f536d20329 and 6d999c39a9f0
2018-09-18 13:14:00 -07:00
cinap_lenrek 6b9cc409de mtx, ppc: remove cistrcmp() and cistrncmp() redefinition 2018-09-18 19:34:29 +02:00
cinap_lenrek bd49212b46 kernel: fix livelock in rebalance (thanks Richard Miller)
Once a second rebalance() is called on cpu0 to adjust priorities,
so cpu-bound processes won't lock others out.  However it was only
adjusting processes which were running on cpu0.  This was observed
to lead to livelock, eg when a higher-priority process spin-waits
for a lock held by a lower priority one.
2018-09-18 00:53:05 +02:00
cinap_lenrek e619a03c28 boot(8): document tls and reboot methods 2018-09-17 18:09:33 +02:00
cinap_lenrek 2985d53b7a bootrc: add experimental reboot method to load another kernel
syntax: reboot!bootfile[!method...]

this echos bootfile to /dev/reboot, causing bootfile kernel
to be started.

when method is given, we first connect to the filesystem and
set bootargs so that bootfile can be loaded from the target
network or local fileserver.

note, when no bootfile is given, this causes the kernel to
reboot to bios.
2018-09-16 22:35:16 +02:00
cinap_lenrek 9d60ece816 libndb: add missing ndbdedup.c 2018-09-16 15:27:17 +02:00
cinap_lenrek ed41dd5b28 9boot: don't let user erase the prompt (thanks mischief) 2018-09-16 13:47:33 +02:00
cinap_lenrek a4e444f430 libndb: make ndbipinfo() walk ipnet for all matching entries, concatenate and dedup result 2018-09-16 12:39:47 +02:00
cinap_lenrek 08385e6681 ip/tftpd: remove sunkernel hack 2018-09-13 22:15:42 +02:00
cinap_lenrek a33d76f8c9 ape/make: fix \ line continuation parsing 2018-09-13 11:54:20 +02:00
mischief 5ea7337ae7 port: sync two longjmp fixes from drawterm
see drawterm commits f5e26ae93a6a and fa388286b4ca
2018-09-12 00:35:45 -07:00
mischief bcb3b3940e sdahci(3): correct device name for top level control messages (thanks joe9) 2018-09-11 00:23:35 -07:00
mischief 8c513a0740 atazz(8): fix probe formatting 2018-09-10 23:39:58 -07:00
cinap_lenrek e4d0a76289 ndb/cs: don't do dns lookups when all we got is loopback or link local addresses 2018-09-09 15:38:53 +02:00
cinap_lenrek 183ab18dfc libip: ignore ipv6 link local addresses for myipaddr() 2018-09-09 15:35:14 +02:00
cinap_lenrek b591ee195b devarch: reading msr 0xffffffff 2018-09-09 01:53:53 +02:00
cinap_lenrek ba7b07d51a devarch: restrict i/o port access to 64K, disallow msr 32-bit wrap arround (thanks aiju) 2018-09-09 01:41:35 +02:00
cinap_lenrek 4f2cdcf74b stats: fix etherstats, avoid vmax == 0 2018-09-09 00:24:43 +02:00
cinap_lenrek e534c4147e libmach: substitute /dev/zero for /proc/$pid/fpregs when missing (for snapfs) 2018-09-08 23:31:30 +02:00
cinap_lenrek 97a2e35a0c devarch: fix /dev/msr (thanks joe9, aiju)
the end condition port < offset+n could never become
false when offset truncated to 32 bit signed port is
negative. change the condition variables to unsigned
int.

msr's are not byte addressible, so advance reads by
one instead of 8.
2018-09-08 22:24:36 +02:00
cinap_lenrek a3d8481bb6 libvorbis: fix broken free() (thanks mischief) 2018-09-08 15:15:08 +02:00
cinap_lenrek 96210d79b2 merge 2018-09-08 14:50:41 +02:00
cinap_lenrek 2839760066 rc: fix Xpipefd unbalancing the redir stack
Xpipefd wants the pipe descriptor to be closed in turfredir(), so
it pushes the redirection, but this breaks Xpopredir after normal
redirection. so we shuffle the Xpipefd redir to the bottom of the
stack.
2018-09-08 14:49:00 +02:00
stanley lieber 178bc8548a fortunes: I've been looking into running Plan 9 in JSLinux -- Skip Tavakkolian 2018-09-06 19:08:57 -04:00
mischief 46d49b5dd2 audio/libogg: nuke old libogg.au 2018-09-05 08:37:01 -07:00
cinap_lenrek 2e9835e771 vt: fix selection past baseline (thanks BurnZeZ) 2018-09-04 20:55:10 +02:00
cinap_lenrek 217e8a0619 vt: fix selrange() to recover whitespace indention 2018-09-03 22:37:45 +02:00
cinap_lenrek 676298b16b vt: get rid of "clear" menu entry, fix 24x80 resize, reset selection on setdim(), document snarf/plumb 2018-09-03 21:51:32 +02:00
cinap_lenrek 80cd634c4d vt: fix plumbsel(), snarfsel()
- plumbsel()
	- remove debug prints
	- use smalloc() to convert to bytes
	- fix spurious -1 close of plumb fd

- snarfsel()
	- fix rune buffer leak in open error case
2018-09-03 20:54:26 +02:00
cinap_lenrek de9aa721f6 vt: implement proper selections (thanks Ori_B)
Ori Bernstein wrote:
> I finally got around to taking another shot at this vt patch. This change
> gets rid of implicit snarfing, and instead makes selection the way you
> select text for snarfing or plumbing. Select, then use a menu entry.
>
> It would probably be nice to have double click to expand the selection,
> rio-style, along with plumbing implicitly taking the current word, but
> that can be a separate patch.
>
> This change also punts on scrolling for simplicity -- it clears the
> selection instead of trying to handle the cases where the selection
> goes offscreen.

little amendments:

- fix line selection (point min/max inversion)
- clear selection when switching linesel/blocksel
- move selection on scroll
2018-09-03 20:05:26 +02:00
cinap_lenrek 4596959f3b ndb(8): ndb/inform also publishes ipv6 address now 2018-09-01 15:11:46 +02:00
cinap_lenrek 5a2c3580fc ip/dhcpd: bring back interface address for arpenter()
the arp table is per interface, so it is possible to have the same
netwrok on multiple physical interfaces, tho with different source
ip address. one example would be a ethernet and a wlan interface.
the mac addresses on these mediums can differ (arp proxying taking
place).

so provide our source address on the interface we received the
request on.

the previous change used the ifcaddr; which is correct; but due to a
oversight in the kernel, had to match the ip of the arp entry.
source address will always work.
2018-09-01 15:08:40 +02:00
cinap_lenrek 4e61bc282c ip/dhcpd: add varargck pragma for warning() and fatal(), do syserr with %r format 2018-09-01 14:59:19 +02:00
cinap_lenrek 3fa5aaa1bc ip/ipconfig: add varargck pragma for warning() function 2018-09-01 14:53:38 +02:00
cinap_lenrek 2d9147a33c rtl8169: fix receive for nuc BOXNUC7CJYH 2018-08-31 22:39:46 +02:00
qwx 55e0fd6031 dmid: add support for midi streams
tested with a usb midi keyboard and a midi->usb adaptor
2018-08-31 18:01:21 +02:00