Tag Archives: retro

Mikrotik Wifi, 80386 and Lilygo streaming

Quiet days, I working on some art.

But here are the last ‘prutsen’

My current Wifi setup

I’ve got a Wifi outside of my network for guest and emergency. ( 2 SSIDs)

Then a main Wifi router in my livingroom, one in my workshop/studio and one in the Attic (Electronics Lab)

So three main Wifi AccessPoints. These all have the same SSID’s but on different frequencies. That way i’ve got roaming in and outside my house.
Also some virtual accesspoints are configured.
I’ve got a main, folkband, IOT, guest-inside all on 2.4Ghz and 5Ghz.

I watched a lot of YT presentations about Mikrotik Wifi.

So I ended up with DFS safe channels 20Mhz for 2.4 and 20/40Mhz Ce for 5Ghz. (subchannels for each after some frequency scanning)
(2.4 does a failback to 20Mhz whenever there is even one client detected which connects only on this band. Such as some old IOT stuff)
2.4 in only 1,6 and 11 no overlap, each on another device.
300Mbps is sufficient for my wifi 🙂

I’ve got accesslists in place and i’m going to read into kicking a client when the signal strenght is below -50dB

80386 (DX) Computer

Besides my 8088 and 8086 machines I needed a machine which could run our old demo’s. So I bought a new toy.

It has 8Mb Ram and runs at 40Mhz.

I’ve noticed that many of my VGA register manipulation code, can’t be run on a modern VGA monitor, I need to use a CRT for that .. Another thing to buy

Lilygo T-Display S3 Streaming

Not my code: https://github.com/Steve5451/esp32-stream-desktop
A very cool project!

Needed to fix arduino code, due to the TFT_eSPI library issues.
And I’ve got a S3 with another resolution, but that was an easy fix.
Then needed to reinstall nodejs with another version.
Had to modify the code because the tcp server would not start.
Weird errors logging, but in the end fixed … very cool

I probably end up designing a 3D printed case that looks like a monitor or tv.

My dosbox assembly directory

Below you can find the files in a zip for writing assemby machine code in dosbox.

I’ve got mine extracted in ~/projects/dos

To automount this i’ve edited

~/.dosbox/dosbox-*.conf
;-------- bottom part
[autoexec]
# Lines in this section will be run at startup.
# You can put your MOUNT lines here.

mount c: /home/myusername/projects/dos
c:

The files

  • A.BAT – Runs editor, masm,linker (start with a<space>progname
  • DEBUG.COM – msdos debugger
  • EXE2BIN.EXE – exe to com (if segments allow)
  • GFX.ASM – example template (see below)
  • LINK.EXE – masm linker
  • MASM.EXE – masm compiler
  • Q* – editor stuff
  • Q.EXE – editor
  • SR.EXE – sourcer
  • SYMDEB.EXE
  • TASM.EXE – turbo assembler
  • TD.EXE – turbo debugger
  • TLINK.EXE – turbo linker

Template

; everything in 64k CS, DS, and SS are the same
.model small
; start pointer
.stack 100h
.code
start:
	; set mode 13 (320x200 * 265 colors palette)
    mov ah,0	
    mov al,13h
    int 10h

    ; set pixel in the middle color 2 (cyan)
    mov ah,0ch
    mov al,2
    mov cx,160
    mov dx,100
    int 10h

	; wait key input
    mov ah,0
    int 16h

	; set mode back to text
    mov ah,0
    mov al,3
    int 10h

	; exit to dos
    mov ax,4c00h
    int 21h
end start

Usage

start dosbox
a gfx (edit gfx.asm example)
esc, q, e
gfx (run program)

GLABios for Laser XT/3

In previous post :

I mentioned a 2 ROM setup because the 8086 is 16bits instead of 8.
So I was wondering that maybe a recompile was needed, or the data being split over two roms (odd/even)

The guy from GLABios was so kind to build me two interleaved roms.

So while working on a padded bench, I tested the ROMs.

Working outside .. on the padded bench

Back to the roms, it didn’t work!

But I missed a detail in the technical manual (the bold text)

In Turbo XT /2 and Turbo XT /3, there are two 28-pin sockets for ROM,
both of them are occupied by 2764 which stored the BIOS. The contents
of the two 2764 are identical.
One of them contribute the ODD Byte to the system and the other EVEN Byte. Together they support 16 Bit BIOS
access.

I don’t know why this is how it works, but when I flashed two the same 28C64’s it worked!
(I also tought that is was strange that both original roms had the same markings.

It workes!

Only remarks/observations:

  • There was a longer wait time before the CF Card was detected/accessed
  • GLABios mentions 8088 in the splashscreen, but the machine is a 8086

UPDATE

GLABios was not updated for displaying 8086 yet.
Error 1701 was the (old spinning) harddisk not being connected.

Nice .. harddisk infomation like size, rom address and CHS

8086 sideway scroller ‘n stuff

Today I was working on my own brew ISA card (wirewrapping).
Did some mini modeling stuff.
Sorted some pipetunes.
And played around with my 8086.

Got it on a desk now, and replaced the harddisk with the CF card.
Also got an old SoundBlaster working, so i wanted to see what of my old code could still run.
Apparanty most code was compiled for 386/486 🙁
So i recompiled some stuff.
Below a horizontal scroller example.

Meanwhile i got my new fans in for my NUC (Kodi player, it was making a hell of a noise due to bad ball bearings.

WRITING A MINI INTRO WITH PICTURE AND SID TUNE (C64) PART 2

Adding a picture:
Most used is loading a koala picture.
Never done it like this before, luckily loads of retro lovers are posting code examples.
There are a lot of tools now available on PC. (Windows and Linux)

Acme : compiler i’ve used for this example
Retropixels : converting jpg into koala
Exomizer : packing/compressing the C64 prg (16k to 5.4k)
Sidreloc : relocator for SID files.

Exomizer command with effect:
(NOTE on linux you have to use single qoutes!)

retropixels -r 64 --format prg bottom.jpg ; for a prg (not used)
retropixels bottom.jpg ; for a koala picture

exomizer sfx 0x080d bottom.prg -x 'lda $fb eor #$01 sta $fb beq skip dec $d020 inc $d020 skip:'
# 0x080d is the starting address

Code

!to "bottomsm.prg",cbm
; start prg
* = $0801
; header for sys auto start
!byte $0b, $08, $00, $00, $9e, $32, $30, $36, $31, $00, $00, $00

PICTURE = $2000
BITMAP = PICTURE
VIDEO = PICTURE+$1f40
COLOR = PICTURE+$2328
BACKGROUND = PICTURE+$2710

* = $080d

	sei
	lda #<irq
	ldx #>irq
	sta $314
	stx $315
	lda #$1b
	ldx #$00
	ldy #$7f 
	sta $d011
	stx $d012
	sty $dc0d
	lda #$01
	sta $d01a
	sta $d019 ; ACK any raster IRQs
	lda #$00
	jsr $1000 ; Call music

	lda #$00
	sta $d020 ; Border Color
	lda BACKGROUND
	sta $d021 ; Screen Color

	; Transfer Video and Color
	ldx #$00
.LOOP
	; Transfers video data
	lda VIDEO,x
	sta $0400,x
	lda VIDEO+$100,x
	sta $0500,x
	lda VIDEO+$200,x
	sta $0600,x
	lda VIDEO+$2e8,x
	sta $06e8,x
	; Transfers color data
	lda COLOR,x
	sta $d800,x
	lda COLOR+$100,x
	sta $d900,x
	lda COLOR+$200,x
	sta $da00,x
	lda COLOR+$2e8,x
	sta $dae8,x
	inx
	bne .LOOP

	; Bitmap Mode On
	lda #$3b
	sta $d011

	; MultiColor On
	lda #$d8
	sta $d016
	; When bitmap adress is $2000 ; Screen at $0400 ; Value of $d018 is $18
	lda #$18
	sta $d018
	cli
	.MYLOOP
	jmp .MYLOOP

irq
	lda #$01
	sta $d019 ; ACK any raster IRQs
	jsr $1003 ;Play the music
	jmp $ea31
   
; Data parts with headers cut
	* = $1000
	!binary "bottom1000.sid" ,, $7c+2


	* = PICTURE
	!binary "bottom.kla",,2

Writing a mini intro with picture and sid tune (C64) part 1

Started with a example from https://codebase64.org/

But that didn´t work (see movie clip)

looking at the sid info:

Title Bottom
Author Richard Bayliss
Released 2011 The New Dimension
Load Address $8000
Init Address $8000
Play Address $8003
Number of tunes 1
Default tune 1
Speed $00000000
SID Model 8580
Clock PAL
File Format PSID
Format Version 2
BASIC false
PlaySID Specific false

I saw that I have to move the load/init/play address.

Luckily there is sidreloc !

wget https://hd0.linusakesson.net/files/sidreloc-1.0.tgz
tar xzvf sidreloc*
cd sidreloc
make

Using:

~/Downloads/sidreloc-1.0/sidreloc  -p 10 ~/projects/sidplaybottomdemo/bottom.sid ~/projects/sidplaybottomdemo/bottom1000.sid

I could successfully move the sid to $1000

Final code (for now, next time i’ll add a picture).
(Using ACME as compiler, and X64 (vice as emulator))

;https://codebase64.org/doku.php?id=base:simple_irq_music_player
             !to "bottom.prg",cbm

        * = $0801
			
sysline:	
        !byte $0b,$08,$01,$00,$9e,$32,$30,$36,$31,$00,$00,$00 ;= SYS 2061

        * = $080d 

             sei
             lda #<irq
             ldx #>irq
             sta $314
             stx $315
             lda #$1b
             ldx #$00
             ldy #$7f 
             sta $d011
             stx $d012
             sty $dc0d
             lda #$01
             sta $d01a
             sta $d019 ; ACK any raster IRQs
             lda #$00
             jsr $1000 
             cli
hold         jmp hold 
                      ; we could also RTS here, when also changing $ea81 to $ea31
irq
             lda #$01
             sta $d019 ; ACK any raster IRQs
             jsr $1003 ;Play the music
             jmp $ea31
            
            * = $1000
             !binary "bottom1000.sid" ,, $7c+2

XT-CF-Mini Bootable 8-bit ISA CF Card Interface – XT-IDE

Today I got this card (I bought it on Ebay)

It’s fitted with a 64Mb card. Note: the XT at my parents place had a 20Mb harddisk!

It can boot / emulate a harddisk with MsDos installed.

Replace an old or dead hard drive in a vintage PC with a hassle-free, reliable CompactFlash card!
Plug-in and go! (well, as much as you can expect with these old machines)

Brand new!
Built and tested.

Open Source!

This bootable expansion card provides a Compact Flash card interface to 8-bit ISA systems such as PC/XT. Typically paired with a 64MB or 1GB CF card. Silent, and more reliable than an old mechanical hard drive.

By default the XT-IDE BIOS comes configured for:
XT(and higher)-compatible BIOS.
Use the XT-CF-Mini’s IDE interface at 300h, no IRQ.
Boot first hard drive unless user presses A for floppy.
Any of the above can be changed with the simple DOS utility and built-in switches.

Switches and jumpers control:
I/O port for the 8-bit IDE (CF) interface
I/O port for the Option ROM
Option ROM Enable
Option ROM Write-protect

Note: Not all CF cards will work. Most work, but some don’t adhere to the CF standard fully, and won’t work. The full size XT-IDE card with an IDE>CF adapter, is compatible with more CF cards.

https://github.com/Bluelavasystems/XT-IDE-CF-MINI
XT-CF-Mini Pcb designed by Monotech Pc’s and released opensource GNU General Public License v3.0

It is from Blue Lava Systems, who took the schematics from Sergey Kiselev, who took the design from James Pearce.

The harddisk extension is XT-IDE Universal BIOS.
And can be flashed.

Schematic below

ROM address D0000, and IO port 300h does not need a IRQ

After installing this on my 8088/v20 motherboard I tested this with GlaBIOS, but it gave me one beep, and after that it woukd reset the machine.

Testing with the original Phoenix Bios and PCXtBios worked for me.

UPDATE: Bad contacts and a eeprom I didn’t trust.
Greg gave me version 0.2.5 of Glabios, which I burned to a new eeprom. And I cleaned some contacts.
(Checksum rom changed with every reset)

The Card and my extension bios both run with all bios-ses

Amstrad/Sinclair PC200 dualscreen

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?)

In addition to MS-DOS 3.3 and PPC Organiser (a memory-resident suite of utilities), the PC20/PC200 was supplied with GEM. (I do not have those disks)
https://en.wikipedia.org/wiki/GEM_(desktop_environment)

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.


Bios Extension boot and bootsector programs.

Followup on

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

Python script here: https://www.henriaanstoot.nl/2023/06/20/bios-hacking/

Write EEprom

minipro -w 1.COM -p AT28C64

Part 2 – Bootsector program !

Allmost the same as above, but booting from a Floppy disk.

Video mode info : https://stanislavs.org/helppc/int_10-0.html

Assembly code

use16              ; 16 bits 
org 0x7c00         ; start address ( change? )

mov ah,0x0         ; ah 0h - video mode 
mov al,0x0         ; al 0h - mode 0 - 40x25 chars
int 10h            ; scree routines 
mov cx,11h         ; 11 chars
mov ah,0ah         ; ah 0ah - print char mode
mov al,'#'         ; choose char as #
int 10h            ; execute 


times 510 - ($-$$) db 0 ; fill rest 512 bytes sector

dw 0xaa55 ; magic bytes