JiffyDOS is an enhanced DOS for the C64. The software is programmed onto ROM chips that replace the Kernal ROM chip on the motherboard and the DOS ROM chip in the disk drive. JiffyDOS is intended to provide greater speed, commands and convenience than on stock systems.
The 1541 drive is a computer on its own, using a 6502 and VIA chips. (See other pages) (C64 uses a 6510, that is the same slightly modified version of the 6502) A cool example of the drive being an OS/computer on its own: https://www.youtube.com/watch?v=zprSxCMlECA
Some notes:
I want to use a larger rom and using the higher address lines as kernal selector. Address line A13 and A14 can be used as selector
There is a schematic out there using runstop at boottime to do de selection of the rom part
Did I misspell kernel? NO (Below from Wikipedia)
The KERNAL was known as kernel inside of Commodore since the PET days, but in 1980 Robert Russell misspelled the word as kernal in his notebooks. When Commodore technical writers Neil Harris and Andy Finkel collected Russell’s notes and used them as the basis for the VIC-20 programmer’s manual, the misspelling followed them along and stuck.
Original Kernal: 901227-03 8-kilobyte 2364 ROM 4K * 8 bits PROM
28C265 = 32K * 8bits
Diffference in ROM size AND there are some other pin placements.
V0.1
Romselect should be /(a15 * a14 * a13) depending on ram/rom switch.
SEL0
SEL1
0
0
rom0
0
1
rom1
1
0
rom2
1
1
rom3
$E000-$FFFF – ROM 57344-65535
KERNAL ROM or RAM area (8192 bytes); depends on the value of bits #0-#2 of the processor port at memory address $0001 $FFFA-$FFFF – hardware vectors
Using searle’s design, i can draw pixels using composite video out.
Converting b/w png to hex include files, for usage in vasm I did the following.
#Python script to convert black levels to pixels
from PIL import Image
i = Image.open("fash.png")
pixels = i.load() # this is not a list, nor is it list()'able
width, height = i.size
all_pixels = []
for x in range(width):
for y in range(height):
cpixel = pixels[x, y]
if cpixel[1] == 255:
s = '\t.db 0x05,' + hex(int(x)) + ',' + hex(int(y))
print (s)
Running and output example
python3 image.py > out
head out
.db 0x05,0x1,0x16
.db 0x05,0x1,0x18
.db 0x05,0x1,0x19
.db 0x05,0x2,0x7
.db 0x05,0x2,0x8
.db 0x05,0x2,0xc
.db 0x05,0x2,0xd
.db 0x05,0x2,0x17
.db 0x05,0x3,0x5
Control codes and vasm include
01 (01) - Cursor home (Standard ASCII)
04 (04) - Cursor solid
05 (05) - Set graphics pixel (next two bytes = x,y)
0C (12) - Clear screen (Standard ASCII)
0D (13) - Carriage return (Standard ASCII)
0E (14) - Set column 0 to 79 (2nd byte is the column number) or 0 to 39 for a 40 char line
0F (16) - Set row 0 to 24 (2nd byte is the row number)
1B (27) - ESC - reserved for ANSI sequences
vasm include part:
message:
.db 0x01,0x0c ; home and clear
.db 0x1b,0x2d ; disable ansi translation
include "out" ; include hex "png"
.db 0x00 ; end with 0 (part of message print routine)
Use inspect in your webbrowser and change password into input. Just search in the form part. (No you can’t copy paste the ******* field. But you can when you changed this to input)
Hint: Some browsers will highlight the part you are hovering over.
But I didn’t like the continuous logins with automated logins.
So below solution is what i’ve implemented for now.
I’ve installed the IOT extra package from Mikrotik, now I can send MQTT messages from my Wifi enabled Mikrotiks to my Mosquitto broker. (Download extra package zip, extract iot-7.x-arm.npk, upload this to your mikrotik files folder, and reboot) The script I’m running on my Mikrotik, sends the active wifi connections with the comments. ( When a comment is set in the Access List, then it’s a know connection )
[admin@RB40111] /iot/mqtt> export
# may/15/2023 21:45:12 by RouterOS 7.9
# software id = xxxx-xxxx
#
# model = RB4011iGS+5HacQ2HnD
# serial number = xxxxxxxxxxxxxxxxx
/iot mqtt brokers
add address=10.1.x.y client-id=rb4011 name=NR
I made the following script on my MT named mqtt
:local broker "NR"
# MQTT topic where the message should be published
:local topic "rb4011/mac"
:foreach i in=[/interface wireless registration-table print proplist=mac-address as-value] do={
:local message "$i"
/iot mqtt publish broker=$broker topic=$topic message=$message
}
A schedule is needed to run this script every 15 minutes
[admin@RB40111] /system/scheduler> export
# may/15/2023 21:48:14 by RouterOS 7.9
# software id = xxxx-xxx
#
# model = RB4011iGS+5HacQ2HnD
# serial number = xxxxxxxxxxx
/system scheduler
add interval=15m name=mqtt on-event=mqtt policy=\
ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \
start-date=may/15/2023 start-time=13:30:54
Now all wifi connections will be send to topic rb4011/mac.
# Example
.id=*6a;comment=Mobile Henri wlan2;mac-address=44:46:87:xx:xx:xx
Using NodeRed I can make filters and notifications
Below function: get Mac and Comment from payload, if the comment is empty then it is a unknown connection … so send me a warning using Pushover.
// filter function
var output = msg.payload.split(";");
var comment = (output[1].split("="));
var mac = (output[2].split("="));
msg.payload={};
msg.payload = mac[1];
if (comment[1] == "") {
return msg;
}
// is xx:xx:xx:xx:xx:xx online? example
var output = msg.payload.split(";");
var comment = (output[1].split("="));
var mac = (output[2].split("="));
msg.payload={};
msg.payload = mac[1];
if (mac[1] == "xx:xx:xx:xx:xx:xx") {
return msg;
}
Now i’m getting a notification when an unknown wifi connection is made on my Access Point. ( I going to implement the Access List from MT at a later point. No access when not in the Access List)
Last week I got my 1.2MB 5.25″ drive. And tested it with the fluxengine. Now i can read old 5.25″ disks again. And convert these to disk images. Amiga/Atari ST/C64 (single side) and my old MSDos disks. (That’s what I’m using, the fluxengine can read many more)
Why single side C64? you ask? Those are flippy disks, that means they are single sided and you flip the disk in the drive to read the other side.
Why can’t the fluxengine read those?
There is only one sensor in my drive.
Reading side 2 without turning the disk won’t work, the sectors are in reverse! (Maybe there is a trick to read in reverse? Fluxengine is reading and decoding raw disk sectors, but i have to read into this)
Note: The 1541 Drive for the commodore’s is a complete 6502 computer with 2x 6522 VIA and ram/rom chips! (2016-15 2K x 8 bit Static RAM / 27128 16kb x 8)
I started printing the bottom, no problem there. But because of the large size of bottom and top. (Both about a day of printing) I had to change the filament. But I didn’t have a good look at what I took! Below is what you get when printing PLA and switch to PETG!
Temperatures for PLA: Tool: 200 and bed 50 Temperatures for PETG: Tool: 240 and bed 70
So 12 hours printing and I had to start again.
I could not remove the knob, else I would have removed the beige front and spray painted this black.
My work document for my Mikrotiks (Also for my friend Vincent, with a similar setup.)
I’m going to collect information on this page for below changes.
WIFI
Access list connections only
Default forward – only certain clients
Guest network – better setup. I’ve got a folkband guest network right now and a captive portal AP on my internet router. (Outside my network) This is for colleagues of Coline.
Vlan for certain clients
Zerotier
Network routing
Security
IOT
Move all clients to own vlan New or better VLAN setup