While doing some wood work, routing and painting. I managed to have some time to experiment with my PC200.
The Amstrad PC20 / Sinclair PC200 was a home computer created by Amstrad in late 1988. The machine was available in two versions, Sinclair PC200 and Amstrad PC20. (US/UK?)
The limited CGA graphical capabilities and PC speaker sound output were greatly inferior compared to other home computers of the time. I has a modulator to connect a TV and could do hercules graphics on a sub-9 interface.
I got this computer a long time ago. (I still have to post pictures of my collection and getting them out of storage)
Info about this machine:
Build in 1988, Intel 8086 @ 8Mhz 512KB memory 3.5″ Floppy drive TV Modulator Pal 640×200 CGA and Hercules
PC200
It still had a floppy in its drive, NIMMO Disk Juli 1992
Apparently this machine was used with a modem to do some interviewing for the University Amsterdam using Telepanel/Interview!
The ROM has several language options which you could set with dipswitches.
Debug part of ROM
Besides the machine having a “amiga” like case, it has two ISA slots behind a little trapdoor! How cool is that!
Dirty view of the ISA slots (One containing a RTC card)
Enabling only CGA on the machine and plugging in a Hercules card, you can do Multiscreen! CGA and MDA addresses don’t conflict! And if the ROM supports it .. dual screens baby!
Left Hercules and Right CGA
I used a debug command to fill the right screen
f b800:0 1000 ‘f a s h’
Cool little machine
Running old masm/precompiled machine code crashes. I’ll have to look into that.
Under hardware in domoticz install the mqtt broker. Configure your mqtt server (mine is mosquitto) Add devices to floorplans to send these to Mosquitto
Now i can see the topics in MQTTExplorer
Install the home assistant websocket palette in NodeRed
Configure the nodes like above
These are some example flows (I’ll put the function code below)
Above are the NAMED entities in Home Assistant
CODE
//Code for NR temperature filtering on domoticz IDX
//A door censor uses nvalue instead of svalue1
//Humidity can be svalue2
//Check the Mqtt payload in MQTTExplorer which to use!
var varidx = msg.payload.idx;
var varnvalue = msg.payload.svalue1;
if(varidx == 3108)
{
msg.payload = {};
msg.payload = varnvalue;
return msg;
}
Example of the trigger node. When a temperature sensor battery dies, and no new data arrives- in 1 hour, I get a pushover warning. (use pushbullet/email/TV notification whatever you want)
They all have their benefits. But I want the impossible. One with all the benefits. We choose the bag depending on the occasion, but for example a large bag is perfect for a far away vacation, sometimes we do daytrips which can be done with a smaller bag. And I want an even smaller bag when going to the city to get something to eat when on holiday. Or the day trips to family or other cities in our country.
Also the means of transport matters.
Bike: Small one Own car: Big bag and a small one Plane: We have been all over the world, it depends on travel and transport in those countries.
I LOVE the ones with easy access. (Slingshot and mindshift) Some of them have a way to take your tripod with you.
Sometimes we have to take two camera’s with us, so we don’t fight. (Vertex and Mindshift take two)
Lowepro Vertex 200 AW
Comes with a tripod holder, lots of pockets and easy adjustable. Plus it has a rain cover hidden in the bottom.
Hama
A real small bag. This one we use for day trips. Holds camera plus a lens or our small binoculars.
Lowepro Slingshot Edge
This is another day trip bag. For when we need a little more room or take some food with us. Love the sling concept, but not much used anymore.
Mindshift Gear Rotation 180 Horizon
I love this bag! We took this one with us to Peru and Bolivia. Easy on the shoulders and back. I carried this one the whole day for several weeks. The camera sling rests on your hips.
What we take with us in the big bags?
Filters: Polarisation/8x Stop filters + ring adaptors
Today I got the EIStar LP-1. Its just a cheap easy probe, but does the job. My version is only TTL and this one is TTL/CMOS (cmos is better when measuring arduino’s outputs) TTL – Logic 1 = 4.75 -> 5V CMOS – Logic 1 = more around the 3.3/3.7V
Only thing my version has which i’m missing is a pulse detector. One millisecond puls gets clocked into a latch and keeps a led on.
Schematic I found (some similarities can be seen with my version)
I found some parts of our (Edk and Me) bootloader demo.
It was compiled using masm or tasm. Encountering a problem converting the code into a raw bin, to put on a floppy I diverted to another setup to try to get things working.
Using old code (below) and a example from YT, I made the following setup.
Visual studio code, with the x64 assembly plugin. xxd as hexviewer. fasm as assembler (This makes things easier, because it is a native Linux x86 compiler. So no need for dosbox anymore.)
;-------- snip
Start:
JMP SHORT BootHere
NOP
DB "FASH-EDK"
DW 512
DB 2
DW 1
DB 2
DW 0070h
DW 02d0h ;max. aantal sectoren van volume A
DB 0Fdh ;media descriptor
DW 0002h ;aantal sectoren per FAT
DW 0009h ;aantal sectoren per spoor
DW 2
DW 0
BootHere:
mov bp,5
tryboot:
push bp
mov bx,4000h
mov es,bx
mov bx,0
mov cx,2 ;vanaf sector 2
mov dx,0 ;drive A, kant 0
mov ah,02h
MOV AL,8
int 13h ;sector(en) lezen
pop bp
jnc bootok
dec bp
jnz tryboot
bootok:
mov bp,5
;---------- snap
New setup using fasm (bootloader) boot.asm
org 0x7c00 ; still not sure about this, have not found this in our demo
mov bx, 0x1000 ; load sector address
mov es, bx
mov bx, 0x0
; Sector read function
mov dh, 0x0 ; head 0
mov dl, 0x0 ; drive 0
mov ch, 0x0 ; cylinder 0
mov cl, 0x02 ; start sector
readdisk:
mov ah, 0x02 ; read sec
mov al, 0x02 ; demo is > 512 so 2 sectors
int 0x13 ; call bios
mov ax, 0x1000
mov ds, ax
mov es, ax
jmpcode:
jmp 0x1000:0x0 ; far jmp demo
; Expand bin to 512 byte sector
times 510-($-$$) db 0
dw 0xaa55 ; Sector header (ROM as this at the start)
Graphics demo i wrote a long time ago, converted into fasm loadpart.asm
mov ah,0
mov ax, 4f02h ; Set VESA video mode
mov bx, 10dh ; Your video mode number
int 10h
mov al,0
drawall:
mov dx,0
mov cx,0
drawloop:
mov ah,0ch
mov bh,0
push ax
int 10h
pop ax
inc al
inc cx
cmp cx,319
jc drawloop
mov cx,0
inc dx
cmp dx,199
jmp drawloop
jmp drawall
; complete sector with zeros
times 512-($-$$) db 0
Booting the demo in milli seconds using qemu. Next to do: Write this to floppy and test on real hardware.
A reset starts the virtual machine and boots from a virtual floppy. The drawing of the pixels is slow, because I used a int 10h function for every pixel, instead of writing to screen memory directly.
Got a part working again in PCem. This is from our bootdemo. A scroller and sector loader in a bootsector. Needed some include files masm, link, exe2com creates a 12- sector sized floppy. And we’ve got a (little distorted but working) Scroller in boot sector with custom font!
font: db 64 dup (0) ;space
db 0,0,2,2,0,0,0,0 ;!
db 0,2,2,2,2,0,0,0
db 0,2,2,2,2,0,0,0
db 0,2,2,2,2,0,0,0
db 0,0,2,2,0,0,0,0
db 0,0,2,2,0,0,0,0
db 0,0,0,0,0,0,0,0
db 0,0,2,2,0,0,0,0
Today two boot projects. One using a bios extension, so it chip based. Second is a floppy disk boot program. (Creating a test situation to get our old Boot floppy demo working. ( That one without using an operatingsystem like ms-dos.
Creating a Secondary Bios ROM
NAME mycode
.model small
ORG 0h
.code
dw 0AA55h ; Magic header your bios is looking for
db 16 ; lenght of this rom in 512 bytes == 8k
jmp short clear ; jmp to program
ORG 20h ; start of program
clear: mov cx,10 ; clear, set keyboard led and print 10 # chars
mov ah,0ah
mov al,31h
int 10h
mov bh,0
mov cx,1
start: mov al, 11000000b
out 80h, al
print: mov cx,10
mov ah,0ah
mov al,"#"
int 10h
loop1: nop ; loop until doomsday
jmp loop1
db -68 ; This makes the checksum 0
; steps to take: edit source, make this byte entry 0
; compile using make.bat in dosbox
; check checksum using my python script
; output was 68 hex 0x44
; edit asm file place -68 to make the checksum 0x00 again
; compile and burn to ROM
ORG 2000h ; create end of rom 0000h-1fffh = 8K
END
make.bat in dosbox
@ECHO OFF
MASM /DARCH_TYPE="T" /DCPU_TYPE="V" 1;
LINK 1;
EXE2COM 1.EXE