Still hot outside, and i like coffee. So what about some coffee icecream!
200ml Milk (whole)
3 spoons coffee
4 egg yolks
425ml liquid cream
Place a fine meshed strainer over a container. Put the coffee in the seive. Heat the milk (allmost boiling) and pour it over the coffee. Let it cool. Dissolve the sugar in 150ml water. Bring to the boil for a few minutes. Let this also cool for a few minutes. Pour the sugarliquid to the container holding the eggyolks. Add the liquid cream and the coffee-milk solution. Cool in the refrigerator and put into your icecream maker. Thats all.
Used this ice maker for many years, a lot of different icecreams we made!
Above is my design for a hex keyboard to enter opcodes in hex using a simple monitor program. i used a 74ls922 which can decode a 4×4 matrix. I’d rather had a 74ls723 which can encode 20 keys.
Nowhere to be found. So i have to think of a new plan.
Now it is configured as follows:
When pressing the alternate key
addr (to implement)
run (1/2 implemented)
reset (to implement)
step instruction (to implement)
Meanwhile i’ve ordered new keys (the ones i’ve been using for my photomanager project and wnat to have a setup like this:
When you want to show the status of busses and alike, you can’t use a led and restistor directly on the bus, it will require too much current. So i’ve been using below schematic which uses a darlington array.
Now i can display databus, address bus and i’ve been using this for address decoding logic and hex keyboard.
I’ve implemented a second VIA chip, and ordered components to amplify the SID sound part
I play several instruments, and know a lot of tunes by heart. But for some instruments i’d like to have a music sheet in front of me. When playing new tunes or from my old stash, i need it on paper also. And when i do, I’d like my music nicely printed and in the same style.
So i’ve been using multiple programs and tools to get a result i can live with. I’ve got a huge collection of pipe and folk tunes, but whenever i decide that i’m going to play it more often then i’m going to re-create the music sheet. The musicsheet will be printed and put in a folder. But also as PDF wil be placed in my calibre server, with i use to provide my tablets and phones with a digital version. For automatically generating a PDF musicbook i’ve written some scripts. These PDF’s i can use with my DIY bluetooth page turner.
For my bagpipe tunes i started a long time ago with a dos version of Bagpipe Music Writer. Getting a decent result from your printer was a b*tch. But it was do-able.
Several other programs i’ve tried but few stuck. CelticPipes, Ceol Mor, Bagpipe (French), MusicTex, Lilypond for example. I don’t like to click a symbol and place it on the bars, i like typing .. so i’m a little biased. For midi and printing multi bar/staff music i also used Cakewalk Pro.
I use this mainly for Whistle and skeletal melody lines for Uilleann pipes (no ornaments)
Bagpipe IS possible but hard and ugly.
Multiple voices (harmony) is possible.
Chord names can be places above bars, as well as vocals.
I’ve made scripts with headers and footers to get the same output result.
Creating the music is typing the notes and ornaments in a text file.
Little chords for guitar mandoline are also possible.
# Edit/createing a abc music file
vi musicpiece.abc ; edit with plain editor
abcm2ps musicpiece.abc ; convert to ps
ps2pdf14 Out.ps musicpiece.pdf ; ps convert to pdf
Also EasyABC i use occasionally
I still use Bagpipe Music Writer, but the free Player, which is a full version also. (Long story) Using wine on linux it is usable.
In the past i made a virtual machine which could be controlled by a web form and some CGI scripts. I could paste a “bmw” score in a webform which would be send to the virtual machine, a BMW program would be started, printed the tune as a PDF that was send to the website again.
For a long time i also had a abc music to PDF convertor on my website.
I like the way of writing the tunes .. just type abbreviations of ornaments to print. When you know these you are faster than using a mouse!
There is no way to write harmonies. In the past i’ve been using a pdf editor to merge music bars and align those by hand. I’ve stopped doing that. I just print 2 versions. Sometimes i use MuseScore for harmonies and multiinstrumental sheets
I’ve used a lot of programming languages, and besides that a few scripting languages.
Scripting is used to automate stuff, but probably use other tools under the hood. A programming language can probably do this by itself. Most of the time a programming language needs compiling into a executable form. Whereas a script is directly intepreted at runtime.
I’m not good at programming, but i understand the syntax and can read most of it. My programming is mostly by example/copy-paste. Below a list of programming languages and a table below that some scripting languages.
Sooo .. what do i like, still use and why?
And because of recent projects … i have to mention 6502 machinecode!
Programming languages i’ve used
The first programming language i learned. There are many dialects for many different systems.
I learned to program in school. Generic pascal and later Turbo Pascal
This is relatively unknown programming language. Written for intel processors. It used a lot of ms-dos subroutines. Like dsso which stands for dos-standard-string-out. dsso(@(‘Print this text’,eos)); And called a dos routine like below (assembly example) mov dx,(messageaddress) mov ah,09h int 21h
Started with 6502 assemby on my little home computer (a vic-20). After that i learned to program 8085 assembly in school. Also learned a little Z80 programming. When i got a amiga i started with 68000 assembly. And getting the hang of it, some friends and me started programming 80×86.
For a project I needed C programming to control a parallel port, for example for my controllable webcam. Also recently the microcontrollers like the Arduino’s are programmed in C/C++
Perl was also a interesting language, i bought myself a book and started with the examples. One of my friends was a Perl wizard, but i could never get the hang of it. Even with his help.
TCL stands for Tool Command Language, i used the TK extension. So Tcl/TK i used for creating GUI tools in linux. But like what i later used zenity and yad, i think these are more scripting languages.
PHP i used extensively, one of my first big projects was a tunesearch engine with a mysql database.
The last years i’ve been using python more and more. Python has become the de facto standard for IT.
Well .. it is a programming language but i only use it to configure my Xmonad desktop.
Scripting languages i’ve used
Dos batch files is a kind of scripting language
Korn Shell, i did a workshop ksh because i was a AIX admin. Didn’t use this much, because you could install the linux toolkit, and could use bash after that.
I write a lot of things in bash, this is my preferred tool for fast and easy automation. When it’s web based i use PHP
I had to write some plugins for my Flightsim Setup
What about Sql, Dbase, Sed, Puredata and blocky those are all on the Programming Lanuages page of Wikipedia??? Well those i find more of a application markup language. Then you can say abc-music and bmw (bagpipe music writer) are languages also!??
Some call Ansible a programming language, but this is incorrect. It is driven by python scripts and yaml config files.
Below some code part examples of different CPU assembly code
MOV H, A
MOV L, A
MVI A 00
MOV H, A
mov bx,[bx+offset ormsk]
For assembly i use or used below: vasm – vasm is a portable and retargetable assembler – which can be used for a lot of different CPUs masm – a assembler for 80×86, i used this for programming on DOS machines. Also for little projects i used the alway available debug executable. seka/masterseka – programming 68000 on my amiga
Above is my Kicad design (reverse engineering print below, which was made for my 6802CPU, which i could use to test the 6822 PIA) The 6822 is simular to 6502 in design. So i’m going to redo this for my 6502. The 7 segment displays are a start of hex-keyboard/display combo i’m going to post more of in the next days.
Below a part of the rom for the LCD dual line display.
Started to write routines which i can call to manipulate the display. Setting the pointer to a message, setting the line to use and a subset of controlls like: Center, Right, binary to ascii, scrolling, etcetera
lda #0 ; set line number
sta lineno ; store
jsr gotoline ; goto line in display
lda #<message ; get address from message and store for printline subroutine
jsr printline ; print
lda #1 ; set line number
sta lineno ; store
Above additions: New address decoder Below left the new graphical display, below right a test board which shows address lines and decoded chip-enable lines.
A15 high -> ROM A15 && A14 low -> RAM combination of A15 low and A14 high – A13 and A12 wil select peripherals.
Above is a start of a wirewrapped version, i also started a PCB design in KIcad that will continuously be changed as i alter designs.
UPDATE SID Working! Using new address decoder.
SID = $7000
sta SID+$5 ; Channel1 - attack/decay
sta SID+$6 ; Channel1 - Sustain/Release
sta SID+$0 ; Channel1 - Frequency low-byte
sta SID+$1 ; Channel1 - Frequency high-byte
sta SID+$4 ; SAW + Gate
sta SID+$18 ; Volume max
The chip would be selected when A15 is 1 and A14 is 0, A13-A04 it would not listen to. So its 4 bits addresses (total 16), would be repeated in a block $8000-$BFFF (10xx xxxx xxxx aaaa) 16384 addresses for 16 addresses on the 6522
Another simple solution to get a more precise address decoder without using a lot of components is using a ROM. But this wil only work for low speeds! A eeprom is relative cheap
PAL PLA GAL
With these devices you can “program” a schematic which works as above example’s of the 74 series. But now you can do it using only one component.
PALs and PLAs are fuse-programmed, some are erasable like (e)eprom. Below a example of the code. Most of the PAL/PLA/GAL are hard to get and obsolete
;PALASM Design Description
;---------------------------------- Declaration Segment ------------
TITLE pRAM PC_interface Address Decoder
AUTHOR Trevor Clarkson
COMPANY EEE KCL
CHIP decode PALCE20V8
;---------------------------------- PIN Declarations ---------------
PIN 1 AEN COMBINATORIAL ; INPUT
PIN 2 A9 COMBINATORIAL ; INPUT
PIN 3 A8 COMBINATORIAL ; INPUT
PIN 4 A7 COMBINATORIAL ; INPUT
PIN 5 A6 COMBINATORIAL ; INPUT
PIN 6 A5 COMBINATORIAL ; INPUT
PIN 7 A4 COMBINATORIAL ; INPUT
PIN 8 A3 COMBINATORIAL ; INPUT
PIN 9 A2 COMBINATORIAL ; INPUT
PIN 10 A1 COMBINATORIAL ; INPUT
PIN 11 IOW COMBINATORIAL ; INPUT
PIN 12 GND
PIN 13 IOR COMBINATORIAL ; INPUT
PIN 14 ACK_HALT COMBINATORIAL ; INPUT
PIN 15 PLS_EN COMBINATORIAL ; OUTPUT
PIN 16 BRDW COMBINATORIAL ; OUTPUT
PIN 17 MOD_CTRL COMBINATORIAL ; OUTPUT
PIN 18 RAM_ACCESS COMBINATORIAL ; OUTPUT
PIN 19 IO_16 COMBINATORIAL ; OUTPUT
PIN 20 LATCH_MOD COMBINATORIAL ; OUTPUT
PIN 21 LATCH_ADD COMBINATORIAL ; OUTPUT
PIN 22 P300 COMBINATORIAL ; OUTPUT
PIN 23 P300IN COMBINATORIAL ; INPUT
PIN 24 VCC
;PC address decoding functions (not all in this PAL)
;uses latched address to provide low-order address lines to pRAM/RAM
; A3 A2 A1 R/W Addr Function
; 0 0 0 R 300 MFF_0
; W not used
; 0 0 1 R 302 MFF_1
; W not used
; 0 1 0 R 304 MFF_2
; W not used
; 0 1 1 R 306 MFF_3
; W Latch Module Number
; 1 0 0 R 308 PLS_Status (pRAM status)
; W PLS_Control (pRAM control)
; 1 0 1 R 30A Weight/Connection-
; W Pointer RAM access
; 1 1 0 R 30C not used
; W Latched RAM address
; 1 1 1 R 30E not used
; W pRAM_256 module control
; NB. IO_16 must be tri-stated when not in use
;----------------------------------- Boolean Equation Segment ------
/P300 = A9*A8*/A7*/A6*/A5*/A4*/IOR + A9*A8*/A7*/A6*/A5*/A4*/IOW
/BRDW = /P300IN * /IOW
/PLS_EN = /P300IN*/A3*/IOR + /P300IN*A3*/A2*/A1
; MOD_CTRL is active HIGH
MOD_CTRL = ACK_HALT * /BRDW * A3 * A2 * A1 * /IOW
; RAM_ACCESS is active HIGH
RAM_ACCESS = ACK_HALT * /P300IN * A3 * /A2 * A1
IO_16 = GND
IO_16.TRST = /P300IN
; enable 16-bit transfers
; LATCH_MOD is active HIGH
LATCH_MOD = /BRDW * /A3 * A2 * A1
; LATCH_ADD is active HIGH
LATCH_ADD = /BRDW * A3 * A2 * /A1
;----------------------------------- Simulation Segment ------------
TRACE_ON A9 A8 A7 A6 A5 A4 IOR /IOW /BRDW /PLS_EN MOD_CTRL RAM_ACCESS IO_16 LATCH_MOD LATCH_ADD ACK_HALT /P300 /P300IN
SETF /A9 /A8 /A7 /A6 /A5 /A4 /A3 /A2 /A1 IOR IOW /ACK_HALT /P300IN
SETF /IOW ; test P300 doesn't respond
SETF IOW /IOR ; test P300 doesn't respond
SETF A9 A8 /A7 /A6 /A5 /A4 /IOR /P300IN
SETF A2 /A1
SETF A1 ; read mff0-3
SETF IOR /IOW ; test P300 and BRDW
SETF /A3 A2 A1 ; test Latch Module No
SETF IOW A3 A2 A1 ; MOD-CTRL not active until ACK_HALT
SETF ACK_HALT /IOW
SETF IOW /ACK_HALT
SETF A3 /A2 A1 ; check RAM_ACCESS
SETF ACK_HALT /IOW
SETF /ACK_HALT IOW
SETF ACK_HALT /IOR ; check READ and WRITE to RAM
SETF IOR P300IN
SETF /A3 A2 A1
SETF /ACK_HALT /P300IN
SETF /A3 A2 A1 /IOW ; check LATCH_MOD
SETF A3 A2 /A1
SETF /IOW ; check LATCH_ADD
SETF /A3 /A2 /A1 ; shouldn't happen normally
Example FPGA code. A solution which is too fancy for my 6502.
Started to write a program to generate a memory map like this
It will be a python script which generates a ascii table.
| a15 | a14 | a13 | a12 | a11 | a10 | a09 | a08 | a07 | a06 | a05 | a04 | a03 | a02 | a01 | a00 |
| 1 | a | a | a | a | a | a | a | a | a | a | a | a | a | a | a | ROM
| 0 | 0 | a | a | a | a | a | a | a | a | a | a | a | a | a | a | RAM
| 0 | 1 | 1 | x | x | x | x | x | x | x | x | x | a | a | a | a | VIA
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | a | a | a | a | a | a | a | a | PS
Above example shows:
Rom – $8000 and up
Ram – $0000 till $3FFF
Via chip – $6xxx-$7xxxx 16 addresses repeating in this block. This will be the interesting/hard part