cwahlmann / vz200 Goto Github PK
View Code? Open in Web Editor NEWNachbau eines VZ200-Color-Computers (1983)
License: GNU General Public License v3.0
Nachbau eines VZ200-Color-Computers (1983)
License: GNU General Public License v3.0
Wo die Schraubenhalterungen über die innere Wand hinausragen schneiden sie die Wand, so dass das Unterteil nicht mehr hineinpasst.
Lösung: Den betreffenden Teil in Flucht der inneren Wand abschneiden
Behelf: Abfeilen
Der REST-Service erhält von mir:
10 PRINT "HALLO WELT!"
Der Import macht daraus
10 PRINT"HALLO WELT!"
Das ist hier nicht tragisch, in vielen anderen Fällen jedoch schon:
Aus 10 REM TESTPROGRAMM
wird 10 REMTESTPROGRAMM
Leerzeichen in Zeichenketten bleiben davon verschont.
Der Emulator kann per REST - Schnittstellen angesteuert werden. Dafür soll eine Webanwendung in Angular geschrieben werden.
Falls auch als mobile App, mit Ionic. Test Driven Development.
Das Repository soll aufgeräumt werden.
Damit kein Minimalsupport entsteht, den man kaum ablösen kann, und für eine glattere Oberfläche soll die Oberschale am Knick zweigeteilt werden. Sie wird dann vor dem Zusammenbau wieder zusammengeklebt.
Idealerweise haben die beiden Hälften mehrere Löcher vom Durchmesser 1,80mm (bei 70% Größe), so dass man Filamentstücke als Verbinder verwenden kann. Das erleichtert das Zusammenkleben.
Der Emulator soll einen REST Service anbieten, um Tastatureingaben per REST Service abzusetzen.
Die Schraubstutzen für Controller an der Unterseite sind falsch berechnet.
Die Abstände müssen sein:
(denn das Ganze wird ja beim Druck wieder auf 7/10 = 70% verkleinert).
Aktuell fehlen links und rechts ein paar Pixel, von daher noch mal an die Monitor-Aussparung anpassen
When loading vzfiles with autorun the emulation crashes with system reset.
Der Emulator soll eine REST Schnittstelle anbieten, über die man den Quellcode des aktuellen Basic-Programms auslesen kann.
When started within the IDE, the swagger-ui is available, but when run standalone, it doesn't work.
Dabei soll folgendes Protokoll verwendet werden:
Die im Vergleich zu V2 geänderten Teile noch einmal in 70% drucken, damit Christian die Elektronik einbauen und testen kann.
When sending an integer volume to the service it answers with
{"headers":{"normalizedNames":{},"lazyUpdate":null,"headers":{}},"status":0,"statusText":"Unknown Error","url":"http://localhost:8080/vz200/sound/112","ok":false,"name":"HttpErrorResponse","message":"Http failure response for http://localhost:8080/vz200/sound/112: 0 Unknown Error","error":{"isTrusted":true}}
Hi Christian,
um den Boden zu drucken müssen wir noch Anpassungen machen, damit wir den Support unten drunter abbekommen:
So einfach bekomme ich das Modell im Slicer nicht angehoben, der setzt das immer wieder zurück auf 0.
Man könnte nun im Quell-Modell einen kleinen Pin druntersetzen, der dafür sorgt, dass das Modell angehoben wird. Vielleicht so 2mm Durchmesser und 3mm Höhe. Dann bekommen wir entsprechend hohe Unterstützungsstrukturen, die sich dann auch noch ablösen lassen.
Wir separieren die Füße und Bodenleisten derart, dass man sie separat drucken und nachher drunterkleben kann. Das ist natürlich deutlich aufwändiger und beim Drucken so kleiner Strukturen ergeben sich neue Probleme. Der Vorteil wäre, dass wir die in Gummi drucken können.
Ich bin erst mal für Option 1.
emulate extended gfx modes of the vz200 gfx chip
Die Unit-Tests sollen automatisch laufen, sobald ein Push erfolgt.
Die Anzeige des Ergebnisses und der Testabdeckung als Badge ist erwünscht
Es muss ein Monitormodell für das HDMI-Display mit angeflanschtem Raspberry entworfen werden.
Der Emulator verwendet das Verzeichnis "vz", um dort Programme abzulegen. Ziel ist es, dieses Verzeichnis per Companion App anzusprechen, um
Programme hochzuladen:
Programmer herunterzuladen:
und:
Die Services sollen JSON - Daten zurückliefern, sofern es um Text geht (z. B. Verzeichnislistings, Basic-Quellcode).
Die Halterung für die Platine mit dem Taster für den Resetknopf passt noch nicht.
Wunsch: Die App soll einen kleinen BASIC-Editor mitbringen, über den man deutlich bequemer Basic-Programme schreiben kann als auf dem VZ selbst.
Dabei sollte er idealerweise auch den grafischen Zeichensatz des VZ beherrschen und optional den jeweils aktuellen Speicherverbrauch ausgeben.
Eventuell ließe sich sogar ein Javascript-BASIC-Interpreter einbinden, der das Programm im Browser ausführt.
Mögliche Ansätze:
Es muss ein Layout für die Tastaturplatine entworfen werden.
Als Schalter sind Microschalter geeignet (4 Füße, Abstand ca. 5mm).
Während der Emulator unter Windows einwandfrei läuft, zeigt er bei mir auf dem Raspi nur einen schwarzen Bildschirm.
Ich habe ihn sowohl unter Windows als auch später unter dem Rasperian kompiliert, mit demselben Ergebnis.
Das Log zeigt eine Fehlermeldung bezüglich der Sound-Bibliothek, zu dem ich aber nichts im Internet finde.
javax.sound.sampled.LineUnavailableException
at org.classpath.icedtea.pulseaudio.PulseAudioMixer.openImpl(PulseAudioMixer.java:714)
at org.classpath.icedtea.pulseaudio.PulseAudioMixer.openLocal(PulseAudioMixer.java:588)
at org.classpath.icedtea.pulseaudio.PulseAudioMixer.openLocal(PulseAudioMixer.java:584)
at org.classpath.icedtea.pulseaudio.PulseAudioMixer.open(PulseAudioMixer.java:579)
at org.classpath.icedtea.pulseaudio.PulseAudioDataLine.open(PulseAudioDataLine.java:94)
at org.classpath.icedtea.pulseaudio.PulseAudioSourceDataLine.open(PulseAudioSourceDataLine.java:75)
at org.classpath.icedtea.pulseaudio.PulseAudioDataLine.open(PulseAudioDataLine.java:290)
at org.classpath.icedtea.pulseaudio.PulseAudioSourceDataLine.open(PulseAudioSourceDataLine.java:51)
at jemu.core.device.sound.JavaSound.init(JavaSound.java:59)
at jemu.core.device.sound.SunAudio.<init>(SunAudio.java:28)
at jemu.core.device.sound.JavaSound.<init>(JavaSound.java:44)
at jemu.core.device.sound.SoundUtil.getSoundPlayer(SoundUtil.java:29)
at jemu.system.vz.VZ.<init>(VZ.java:69)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at jemu.core.device.Computer.createComputer(Computer.java:90)
at jemu.ui.JemuUi.setComputer(JemuUi.java:469)
at jemu.ui.JemuUi.start(JemuUi.java:116)
at jemu.Emulator.start(Emulator.java:66)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleElement.invoke(InitDestroyAnnotationBeanPostProcessor.java:366)
at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleMetadata.invokeInitMethods(InitDestroyAnnotationBeanPostProcessor.java:309)
at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java:136)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsBeforeInitialization(AbstractAutowireCapableBeanFactory.java:416)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1691)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:573)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:495)
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:317)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:315)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:759)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:869)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:550)
at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:140)
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:780)
at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:412)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:333)
at org.springframework.boot.builder.SpringApplicationBuilder.run(SpringApplicationBuilder.java:137)
at jemu.Jemu.main(Jemu.java:11)
java.lang.IllegalStateException: Line must be open()ed before it can be start()ed
at org.classpath.icedtea.pulseaudio.PulseAudioDataLine.start(PulseAudioDataLine.java:345)
at org.classpath.icedtea.pulseaudio.PulseAudioSourceDataLine.start(PulseAudioSourceDataLine.java:51)
at jemu.core.device.sound.JavaSound.play(JavaSound.java:69)
at jemu.system.vz.VZ.emulate(VZ.java:423)
at jemu.core.device.Computer.run(Computer.java:396)
at java.lang.Thread.run(Thread.java:748)
Aug 23, 2019 8:00:24 PM org.apache.coyote.AbstractProtocol start
INFORMATION: Starting ProtocolHandler ["http-nio-8080"]
Aug 23, 2019 8:00:24 PM org.apache.tomcat.util.net.NioSelectorPool getSharedSelector
INFORMATION: Using a shared selector for servlet write/read
Mit der Implementierung des Lautstärkereglers in der App habe ich bemerkt, dass ein höherer Wert die Lautstärke auch wieder absenken kann. 255 ist beispielsweise viel leiser als 240.
Dazwischen scheint es mehrere lokale Maxima zu geben, was völlig der Intention widerspricht, dass höhere Werte = höhere Lautstärke bedeuten.
0 ist immerhin stumm.
Gibt es dafür eine Erklärung und wie muss ich den Regler programmieren, damit ich das gewünschte Ergebnis erhalte?
Die Dokumentation soll überarbeitet und ergänzt werden:
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.