AIS4CBM is een technisch project dat live scheepstracking mogelijk maakt op de Commodore 128. Het programma decodeert AIS-rapporten (Automatic Identification System), die via een seriële interface als NMEA-zinnen binnenkomen, en zet deze om in bruikbare informatie.
Het systeem biedt twee interfaces:
- Een grafische viewer: Gebouwd met BASIC 8 voor VDC-graphics, inclusief een havenkaart en QR-codes die direct linken naar MarineTraffic.
- Een tekstinterface: Gebaseerd op BASIC 7 voor een compact overzicht van de AIS-stream en scheepsrecords.
Technisch gezien is de applicatie opgebouwd uit een runtime in machine-taal (gecreëerd met Kick Assembler) voor de zware taken zoals decodering en data-opslag, terwijl BASIC wordt gebruikt voor de gebruikersinterface. Het systeem kan tot 1.000 schepen volgen in het REU-geheugen. Voor de hardware-setup is een Commodore 128 nodig met minimaal 512 KiB REU-geheugen en een SwiftLink-compatibele seriële input (zoals de Ultimate-II+ of GLINK232).
AIS4CBM — Live scheepstracking op een Commodore 128
AIS4CBM biedt een live weergave van de haven op een klassieke computer. Het programma decodeert scheepsrapporten en brengt deze naar het 80-koloms display van de Commodore.
Wat is AIS?
AIS staat voor Automatic Identification System. Uitgeruste schepen zenden digitale rapporten uit via maritieme VHF-radio, waardoor andere schepen en kuststations informatie kunnen ontvangen over hun identiteit, positie en beweging.
Verschillende rapporten bevatten verschillende delen van het totaalbeeld:
- Positierapporten: Bevatten breedtegraad, lengtegraad, snelheid en koers.
- Overige rapporten: Bieden informatie over de naam van het schip, het callsign, het type schip of reisgegevens.
Software brengt deze rapporten samen met behulp van het MMSI (Maritime Mobile Service Identity), een negenstellig uniek identificatienummer per schip.
In AIS4CBM levert een ontvanger of feed de rapporten aan de C128 via de seriële interface. Deze arriveren als NMEA-zinnen: gestructureerde tekstregels met een gecodeerde AIS-payload. De ontvanger of upstream-service regelt het radio-gedeelte; de Commodore extraheert de velden, werkt het scheepsregister bij en presenteert het resultaat als tekst of op een kaart.
Wat kan een rapport ons vertellen?
- Wie? MMSI, scheepsnaam en callsign.
- Waar? Breedtegraad en lengtegraad.
- Hoe beweegt het? Snelheid, koers en richting.
- Wat is de reis? Details zoals bestemming en geschatte aankomsttijd.
De applicatie combineert deze verschillende berichttypes in één scheepsrecord.
Een project dat met je mee kan groeien
AIS is een uitstekend startpunt voor een Commodore-project omdat het een concreet doel biedt: een inkomend rapport omzetten in iets begrijpelijks op het scherm.
Het project is opgebouwd in stappen:
- Beginnen met één bericht: Met een bekend sample kunnen velden worden gecontroleerd (bitmasks, shifts, byte-volgorde en karakterconversie) voordat een live feed wordt toegevoegd.
- Tekst eerst nuttig maken: Een lijst met schepen kan voorafgaan aan een kaart of muisinterface. Machine-taal kan de rapporten ontvangen en decoderen, terwijl BASIC de waarden formatteert en het display aanstuurt.
- Bouwen naar een live havenbeeld: Toevoegen van rapporttypes, het bijhouden van scheepsrecords, filteren van updates en het tekenen van een kaart. Een drukke feed geeft praktische toepassing aan buffering, scheduling en geheugenbeheer.
De volledige AIS4CBM-applicatie is uiteindelijk uitgebreid met extra opslag en grafische ondersteuning, maar het startpunt blijft simpel: bytes ontvangen, hun betekenis begrijpen en het resultaat tonen.
De grafische viewer
De grafische viewer plaatst AIS-rapporten op een kaart met behulp van BASIC 8 voor de VDC-graphics.
- Van schip naar details: Inspecteer identiteit, positie, snelheid, koers en reisgegevens. Een gegenereerde QR-code (gebaseerd op de implementatie van Martin van The 8 Bit Theory) verbindt het geselecteerde schip direct met de MarineTraffic-pagina.
- Aanpasbare weergave: Filter op scheepsclasses en categorieën; kleur en richting maken de kaart leesbaar.
- Inzicht in de achtergrond: Ingebouwde tellers tonen de mix van inkomende berichten, decodeerchecks en het gebruik van het scheepsregister.
De tekstinterface
De BASIC 7-interface presenteert de AIS-stream als een 80-koloms tekstscope, berichtweergave en scheepsbrowser. Dit biedt een compacte manier om rapporten te volgen en individuele records te inspecteren.
De interface bestaat uit:
- De scheepsbrowser: Scan de gevolgde schepen en hun laatste positierapporten.
- Gedetailleerd overzicht: Combinatie van positierapporten met statische informatie van het schip.
- De tekstscope: Een lichtgewicht ruimtelijke weergave met gekleurde karaktermarkers.
- Inkomende rapporten: Lees gedecodeerde velden zodra de berichten binnenkomen via de feed.
Technische details van het project
Het project is gebouwd rond de Commodore 128. Een runtime in machine-taal handelt de ontvangst, decodering en opslag van schepen af. BASIC 7 en BASIC 8 bieden twee verschillende interfaces voor deze gemeenschappelijke engine. De assembly-code is gebouwd met Kick Assembler.
Systeemarchitectuur
AIS feed (NMEA rapporten) → Seriële input (SwiftLink-compatibel, SwiftLib driver door Craig Bruce) → 8502 runtime (Decode, store, filter) → VDC display (Havenkaart of tekstweergave).
Het scheepsregister
Er kunnen tot 1.000 schepen worden gevolgd in een Bank 1-register. Vaste slots in de RAM Expansion Unit (REU) houden de positionele en statische data vast. Verouderingsmechanismen en het hergebruiken van slots zorgen ervoor dat de opslag beschikbaar blijft.
De decoder ondersteunt Class A en Class B schepen, basisstations, navigatiehulpmiddelen en SAR-vliegtuigen.
Systeemvereisten
- Hardware: Commodore 128 of VICE x128.
- Display: 80-koloms VDC-display met 64 KiB video-RAM.
- Geheugen: Minstens 512 KiB REU-geheugen (fysiek of geëmuleerd).
- Input: SwiftLink-compatibele seriële input en een compatibele AIS-databron.
- Software: BASIC 8-runtime voor de grafische viewer.
De REU bevat de AIS-scheepsdata en de BASIC 8-grafische buffers.
De grafische toolkit (BASIC 8)
BASIC 8 is een grafische uitbreiding voor de ingebouwde BASIC 7 van de Commodore 128. Het voegt functies toe voor tekenen, tekst, brushes en vensters voor het 80-koloms VDC-display.
BASIC 8 wordt gebruikt om havenkaarten weer te geven, scheepssymbolen te plaatsen en menu's en informatievensters te bouwen. De interface blijft hierdoor leesbaar en eenvoudig te ontwikkelen in BASIC, terwijl de 8502 assembly-runtime de zware taken zoals seriële ontvangst en AIS-decodering afhandelt.
Inzichten uit de broncode
Het project bevat kleine tutorials die specifieke technische problemen behandelen:
- BASIC + Machine-taal: Een event-loop met
BASIC WAIT waarbij een gedeelde byte de runtime verbindt met de BASIC-interface.
- Integers en Floating Point: De conversie van AIS-integers (vier bytes) naar een floating-point waarde voor BASIC in
fac.asm.
- CPU-deling (
IGONE): Een methode om te voorkomen dat een oneindige ML-loop BASIC blokkeert, door middel van een statement hook.
- Waarden ophalen via
USR: Terwijl WAIT BASIC vertelt wanneer het moet acteren, wordt USR gebruikt om specifieke scheepsvelden op te vragen uit de machine-taal.
- Kick Assembler Datastructuren: Het gebruik van structuren, hashtables en lijsten om AIS-veldomschrijvingen om te zetten in compacte decodertabellen.
Bouwen met AIS4CBM (API)
De machine-language runtime kan worden gebruikt in andere Commodore 128-applicaties. De API biedt toegang tot scheepsdata, notificaties, filters en runtime-services. De frontend kan in BASIC of een andere taal worden geschreven.
Real Hardware Setup
AIS4CBM draait op echte Commodore 128-hardware.
Hardware-opties en configuratie
- Ultimate-II+: Combineert REU-emulatie, disk-image ondersteuning en een SwiftLink-compatibele netwerkmodem. Gebruik instellingen:
$DE00, NMI en 38400 baud.
- GGLABS GLINK232: Een dedicated SwiftLink-compatibele RS-232 cartridge. Vereist een externe seriële-naar-netwerkmodem of AIS-ontvanger en een REU van 512 KiB of groter.
- Commodore 1750 REU: Een fysieke 512 KiB REU voldoet aan de geheugeneisen voor scheepsopslag en grafische buffers.
- 64 KiB VDC-upgrade: Noodzakelijk voor de grafische viewer op machines die standaard slechts 16 KiB VDC-RAM hebben (zoals de flat/wedge C128 en plastic-case C128D). De metal-case C128DCR heeft standaard 64 KiB.
Erkenningen
AIS4CBM is gebouwd op code, tools en documentatie van de Commodore-community:
- QR-code generatie: Gebaseerd op de implementatie van Martin van The 8 Bit Theory.
- SwiftLink Seriële Driver: Gebaseerd op de SwiftLink/Turbo-232 library (SwiftLib v0.91) van Craig Bruce.
- Assembler en Build Tools: Gebruik van Kick Assembler door Mads Nielsen.
- Ontwikkelingstools: Ondersteuning van Arthur Jordison, maker van CBM prg Studio.
Licentie: AIS4CBM is gedistribueerd onder de GNU General Public License v3.0 of later (GPL-3.0-or-later).
AIS4CBM — Live scheepstracking op een Commodore 128
AIS4CBM biedt een live weergave van de haven op een klassieke computer. Het programma decodeert scheepsrapporten en brengt deze naar het 80-koloms display van de Commodore.
Wat is AIS?
AIS staat voor Automatic Identification System. Uitgeruste schepen zenden digitale rapporten uit via maritieme VHF-radio, waardoor andere schepen en kuststations informatie kunnen ontvangen over hun identiteit, positie en beweging.
Verschillende rapporten bevatten verschillende delen van het totaalbeeld:
- Positierapporten: Bevatten breedtegraad, lengtegraad, snelheid en koers.
- Overige rapporten: Bieden informatie over de naam van het schip, het callsign, het type schip of reisgegevens.
Software brengt deze rapporten samen met behulp van het MMSI (Maritime Mobile Service Identity), een negenstellig uniek identificatienummer per schip.
In AIS4CBM levert een ontvanger of feed de rapporten aan de C128 via de seriële interface. Deze arriveren als NMEA-zinnen: gestructureerde tekstregels met een gecodeerde AIS-payload. De ontvanger of upstream-service regelt het radio-gedeelte; de Commodore extraheert de velden, werkt het scheepsregister bij en presenteert het resultaat als tekst of op een kaart.
Wat kan een rapport ons vertellen?
- Wie? MMSI, scheepsnaam en callsign.
- Waar? Breedtegraad en lengtegraad.
- Hoe beweegt het? Snelheid, koers en richting.
- Wat is de reis? Details zoals bestemming en geschatte aankomsttijd.
De applicatie combineert deze verschillende berichttypes in één scheepsrecord.
Een project dat met je mee kan groeien
AIS is een uitstekend startpunt voor een Commodore-project omdat het een concreet doel biedt: een inkomend rapport omzetten in iets begrijpelijks op het scherm.
Het project is opgebouwd in stappen:
- Beginnen met één bericht: Met een bekend sample kunnen velden worden gecontroleerd (bitmasks, shifts, byte-volgorde en karakterconversie) voordat een live feed wordt toegevoegd.
- Tekst eerst nuttig maken: Een lijst met schepen kan voorafgaan aan een kaart of muisinterface. Machine-taal kan de rapporten ontvangen en decoderen, terwijl BASIC de waarden formatteert en het display aanstuurt.
- Bouwen naar een live havenbeeld: Toevoegen van rapporttypes, het bijhouden van scheepsrecords, filteren van updates en het tekenen van een kaart. Een drukke feed geeft praktische toepassing aan buffering, scheduling en geheugenbeheer.
De volledige AIS4CBM-applicatie is uiteindelijk uitgebreid met extra opslag en grafische ondersteuning, maar het startpunt blijft simpel: bytes ontvangen, hun betekenis begrijpen en het resultaat tonen.
De grafische viewer
De grafische viewer plaatst AIS-rapporten op een kaart met behulp van BASIC 8 voor de VDC-graphics.
- Van schip naar details: Inspecteer identiteit, positie, snelheid, koers en reisgegevens. Een gegenereerde QR-code (gebaseerd op de implementatie van Martin van The 8 Bit Theory) verbindt het geselecteerde schip direct met de MarineTraffic-pagina.
- Aanpasbare weergave: Filter op scheepsclasses en categorieën; kleur en richting maken de kaart leesbaar.
- Inzicht in de achtergrond: Ingebouwde tellers tonen de mix van inkomende berichten, decodeerchecks en het gebruik van het scheepsregister.
De tekstinterface
De BASIC 7-interface presenteert de AIS-stream als een 80-koloms tekstscope, berichtweergave en scheepsbrowser. Dit biedt een compacte manier om rapporten te volgen en individuele records te inspecteren.
De interface bestaat uit:
- De scheepsbrowser: Scan de gevolgde schepen en hun laatste positierapporten.
- Gedetailleerd overzicht: Combinatie van positierapporten met statische informatie van het schip.
- De tekstscope: Een lichtgewicht ruimtelijke weergave met gekleurde karaktermarkers.
- Inkomende rapporten: Lees gedecodeerde velden zodra de berichten binnenkomen via de feed.
Technische details van het project
Het project is gebouwd rond de Commodore 128. Een runtime in machine-taal handelt de ontvangst, decodering en opslag van schepen af. BASIC 7 en BASIC 8 bieden twee verschillende interfaces voor deze gemeenschappelijke engine. De assembly-code is gebouwd met Kick Assembler.
Systeemarchitectuur
AIS feed (NMEA rapporten) → Seriële input (SwiftLink-compatibel, SwiftLib driver door Craig Bruce) → 8502 runtime (Decode, store, filter) → VDC display (Havenkaart of tekstweergave).
Het scheepsregister
Er kunnen tot 1.000 schepen worden gevolgd in een Bank 1-register. Vaste slots in de RAM Expansion Unit (REU) houden de positionele en statische data vast. Verouderingsmechanismen en het hergebruiken van slots zorgen ervoor dat de opslag beschikbaar blijft.
De decoder ondersteunt Class A en Class B schepen, basisstations, navigatiehulpmiddelen en SAR-vliegtuigen.
Systeemvereisten
- Hardware: Commodore 128 of VICE x128.
- Display: 80-koloms VDC-display met 64 KiB video-RAM.
- Geheugen: Minstens 512 KiB REU-geheugen (fysiek of geëmuleerd).
- Input: SwiftLink-compatibele seriële input en een compatibele AIS-databron.
- Software: BASIC 8-runtime voor de grafische viewer.
De REU bevat de AIS-scheepsdata en de BASIC 8-grafische buffers.
De grafische toolkit (BASIC 8)
BASIC 8 is een grafische uitbreiding voor de ingebouwde BASIC 7 van de Commodore 128. Het voegt functies toe voor tekenen, tekst, brushes en vensters voor het 80-koloms VDC-display.
BASIC 8 wordt gebruikt om havenkaarten weer te geven, scheepssymbolen te plaatsen en menu's en informatievensters te bouwen. De interface blijft hierdoor leesbaar en eenvoudig te ontwikkelen in BASIC, terwijl de 8502 assembly-runtime de zware taken zoals seriële ontvangst en AIS-decodering afhandelt.
Inzichten uit de broncode
Het project bevat kleine tutorials die specifieke technische problemen behandelen:
- BASIC + Machine-taal: Een event-loop met
BASIC WAIT waarbij een gedeelde byte de runtime verbindt met de BASIC-interface.
- Integers en Floating Point: De conversie van AIS-integers (vier bytes) naar een floating-point waarde voor BASIC in
fac.asm.
- CPU-deling (
IGONE): Een methode om te voorkomen dat een oneindige ML-loop BASIC blokkeert, door middel van een statement hook.
- Waarden ophalen via
USR: Terwijl WAIT BASIC vertelt wanneer het moet acteren, wordt USR gebruikt om specifieke scheepsvelden op te vragen uit de machine-taal.
- Kick Assembler Datastructuren: Het gebruik van structuren, hashtables en lijsten om AIS-veldomschrijvingen om te zetten in compacte decodertabellen.
Bouwen met AIS4CBM (API)
De machine-language runtime kan worden gebruikt in andere Commodore 128-applicaties. De API biedt toegang tot scheepsdata, notificaties, filters en runtime-services. De frontend kan in BASIC of een andere taal worden geschreven.
Real Hardware Setup
AIS4CBM draait op echte Commodore 128-hardware.
Hardware-opties en configuratie
- Ultimate-II+: Combineert REU-emulatie, disk-image ondersteuning en een SwiftLink-compatibele netwerkmodem. Gebruik instellingen:
$DE00, NMI en 38400 baud.
- GGLABS GLINK232: Een dedicated SwiftLink-compatibele RS-232 cartridge. Vereist een externe seriële-naar-netwerkmodem of AIS-ontvanger en een REU van 512 KiB of groter.
- Commodore 1750 REU: Een fysieke 512 KiB REU voldoet aan de geheugeneisen voor scheepsopslag en grafische buffers.
- 64 KiB VDC-upgrade: Noodzakelijk voor de grafische viewer op machines die standaard slechts 16 KiB VDC-RAM hebben (zoals de flat/wedge C128 en plastic-case C128D). De metal-case C128DCR heeft standaard 64 KiB.
Erkenningen
AIS4CBM is gebouwd op code, tools en documentatie van de Commodore-community:
- QR-code generatie: Gebaseerd op de implementatie van Martin van The 8 Bit Theory.
- SwiftLink Seriële Driver: Gebaseerd op de SwiftLink/Turbo-232 library (SwiftLib v0.91) van Craig Bruce.
- Assembler en Build Tools: Gebruik van Kick Assembler door Mads Nielsen.
- Ontwikkelingstools: Ondersteuning van Arthur Jordison, maker van CBM prg Studio.
Licentie: AIS4CBM is gedistribueerd onder de GNU General Public License v3.0 of later (GPL-3.0-or-later).