../../images/zoom.gif ../../images/exit.gif
 CPM CP/M Handleiding FAC (CP/M Control program and monitor, digital research) door Peter Huisken
    Word.doc - files in de directory: /doc/

 


  Zo werd CPM in
  Den Haag gebracht.

VOORWOORD  
( Voor de hardware beschrijving zie de hardware sectie. )

Deze documentatie is zeer kort in vergelijking tot de aangesneden koek. De hardware wordt slechts kort besproken, zonder een uitgebreide bouwaanwijzing te presenteren. Het lijkt me dat voor de bouw van het systeem nogal wat kennis, handigheid, koppigheid enz. vereist is. Ondanks dit moet er met de hulp van iemand die het systeem al werkend heeft wel uit te komen zijn. Naast de hardwarekennis veronderstel ik ook kennis van CP/M (Control Program Monitor (Microcomputer)), ÓDigital Research) operating-system, ZCPR2, ATOM-DOS en GDOS. Indien niet voorradig, lees dan een CP/M boek en loop eens langs bij een DOS-bezitter.
Sommige stukken tekst heb ik niet vertaald in het Nederlands. Deze tekst was al beschikbaar voordat ik deze handleiding ben gaan schrijven.
Voor public domain CP/M software (waaronder ZCPR2 en P2DOS ! ) met handleidingen kan men bij de CP/M-gg terecht. De CP/M-gg is een onderdeel van de Hobby Computer Club (HCC).

Zonder hulp van de leden van de afdeling Twente was dit project niet geworden tot wat het nu is. Met name ben ik de volgende mensen dank verschuldigd voor het ontwikkelen van de print:
Rien Stoop, voor het tekenen van het schema, bouw proefmodel, vele correcties op de print layout.
Fernando Monsanto, voor coördinatie print.
Paul Klomp, voor bouw proefmodellen, correcties, tips, testen software, programmeren van vele eproms.
Harm de Leeuw: opnieuw tekenen schema, komponenten opstelling en nummering.
Jos Huisken, voor het beschikbaar stellen van zijn BIOS. Deze heeft als basis gediend voor de ontwikkeling van mijn software.
Peter Huisken

../../images/terug.gif BASISOPZET

Het Z80 kaartje is op de eerste plaats bedoeld om CP/M compatible software te kunnen draaien. Om dit zo goedkoop mogelijk, en toch goed, te realiseren kan men het beste gebruik maken van de interfaces die je al in je ACORN ATOM computer hebt ingebouwd. Ik noem een paar dingen als: 80 kolommen kaart, printerinterface en toetsenbord. Door nu de Z80 met een snelle interface aan te sluiten is het mogelijk om met een geschikt protocolletje alle informatie voor de verschillende interfaces heen en weer te sturen zonder dat dit ten koste gaat van de snelheid. Nu vraagt u zich misschien af waarom de disc controller niet in de ATOM is ingebouwd. Bij bijna alles wat er gebeurt onder CP/M wordt er disc-access gepleegd. Wanneer de disc interface in de ATOM wordt gebouwd wordt CP/M circa drie keer langzamer. Dit is niet acceptabel (vergelijk de Commodore).
Aangezien er nu, weliswaar met omweg, een disc aan de ATOM hangt moet het ook mogelijk zijn om ATOM files op te bergen op schijf. Hiertoe moet de standaard DOS van de ATOM enigszins gewijzigd worden. In de plaats van de besturing van de 8271 floppy disc controller komt een communicatie programmaatje die via de Z80 disk-sectoren kan lezen en schrijven. Vanwege de extra communicatie wordt de dos bijna twee keer langzamer dan de standaard ATOM-DOS. Door de gebruikte constructie zijn alle faciliteiten van de standaard DOS aanwezig. Dit houdt in dat alle programma's gedraaid kunnen worden, m.u.v. die programma's die de 8271 FDC rechtstreeks aanspreken.

Wat heeft men naast het Z80 kaartje nog nodig om het ten volle te benutten?
  1. De ACORN ATOM moet nog voorzien worden van een bidirectionele interface voor communicatie met het Z80 kaartje. Verderop wordt beschreven hoe je de benodigde 6522 VIA aan moet sluiten.
  2. Voor een fijn CP/M compatible systeem is een 80 kolommen kaart onontbeerlijk. Naast de club 80 kolommen kaart (VDU80) zijn ook de Elektuur en de Twente - kaart bruikbaar. De Elektuur kaart kent niet de 'low' en 'high' video zoals deze veel gebruikt wordt in de wat luxere tekstverwerkers. De club-kaart is het makkelijkst aan te sluiten. Bovendien heeft deze kaart geen last van beeldruis.
  3. Een CP/M systeem draait niet zonder disc drives. Wat betreft disk-capaciteit lijkt het me nuttig te vermelden dat met 1 diskdrive van 800 kilobyte redelijk te werken is. Twee drives voldoen natuurlijk beter. Denk trouwens niet dat 400 Kb per disk veel is. Heeft men nog geen drives, koop dan altijd 800Kb modellen. Het prijsverschil verdien je snel terug aangezien je minder diskettes nodig hebt. Let bij aanschaf op de zgn. steprate. Neem bij voorkeur 3 Ms (80 trk) of 6 Ms (40 trk). Voor langzamere drives moet de software gepatched worden.
Om deze hardware goed te kunnen gebruiken heb je de volgende (meegeleverde) systeemsoftware nodig:
  1. Voor de Z80 kaart is een EPROM met inhoud nodig.
  2. Voor het draaien van CP/M software is een zogenaamde BIOS (Basic Input Output system) noodzakelijk. Deze BIOS biedt het zogenaamde P2DOS bepaalde standaard routines aan voor Input en Output (voor disk, terminal, printer).
  3. ZCPR2 en P2DOs. Deze twee systeemdelen vervangen de zogenaamde CCP en BDOS. (Ó Digital Research). De ZCPR2 is geschreven door R. Conn, P2DOs is geschreven door H.A.J ten Brugge. Deze programma.s zijn voor niet commercieel gebruik in de 'public domain' geplaatst door de auteurs. Mede hierdoor kan dit projekt een succes worden.
  4. De systeem afhankelijke utilities SYSGEN en FORMAT.
  5. Terminal programma in de ATOM. Dit programma omvat o.a. nogal uitgebreide 80 kolommen VDU software, printer driver en buffer, toetsenbord buffer met functietoets afhandeling , en tenslotte de communicatiesoftware met de Z80 kaart.
  6. In de ATOM moet een 4 kilobyte EPROM gezet worden met een gepatched DOS (AtomDos of GDOS). De AtomDos is Ó Acornsoft. De GDOS is geschreven door Gerrit Hillebrand. De DOS is gemakkelijk voor het aanpassen van de terminal.
Naast bovengenoemde absoluut noodzakelijke systeem software worden de volgende programma's (voor gebruik onder CP/M) ook verspreid:

PRKEY.COMHiermee zijn de functietoetsen van de terminal ( = ATOM ) instelbaar.
ATOMDOS.COMDit programma maakt het mogelijk om maximaal 8 ACORN ATOM diskettes te simuleren op 1 CP/M schijf
(Er is een speciale BIOS nodig).
CREATE.COMAanmaken van files (merk op dat 1 CP/M file overeenkomt met een hele disk bij de ATOM)
voor ACORN ATOM DOS.
AACOPY.COMKopiëren van ACORN floppy’s naar CP/M files (en vice versa).
DCONF.COM Voor instellen van de BIOS voor allerlei disk- formaten.
RSECT.COMGemakkelijk voor het inspecteren van vreemde floppies.

../../images/terug.gif BESCHRIJVING VAN DE HARDWARE VAN DE Z80-KAART

Naast de Z80 CPU (D27) is op de kaart o.a. het volgende aanwezig:
  1. Geheugen: 8 * 4164 D-RAM chips (D14-21) en 27128 EPROM (D28).
  2. Floppy-controller MB8877 (D241.
  3. Parallelle interface Z80 PIO (D5).
De genoemde NMOS chips worden bij elkaar gehouden door 18 TTL IC.s, een stel weerstanden, onstoringscondensatoren en een kristal. Ik zal nu enkele punten van het schema wat gedetailleerder bespreken.

AANSTURING VAN DE RAM EN BANKSWITGHING

Na een hardware reset begint de Z80 microprocessor instructies uit te voeren vanaf adres #0000. Het is noodzakelijk dat hier ROM aanwezig is zodat na power-up de machine kan opstarten. Een FLIP- FLOP van het type '74 (D11) zorgt ervoor dat na een reset de EPROM geselecteerd kan worden. De adresruimte 0000-7FFF Is dan voor de EPROM. Het gebied 8000-FFFF Is altijd bezet door RAM geheugen. Na opstarten van een programma kan de EPROM uitgeschakeld worden zodat de hele adresruimte bestaat uit RAM.
De flip-flop voor de bankswitching wordt bestuurd door een adres in de Input/Output Map aan te spreken. Door de Z80 een zogenaamde OUT- instructie te laten uitvoeren naar IO-adres 21 hex kan de EPROM uitgeschakeld worden. De vrijgekomen ruimte wordt dan ingenomen door RAM. Met een OUT- instructie naar adres 20 wordt de EPROM weer teruggeschakeld. Door deze constructie is het mogelijk om bepaalde standaard software op te slaan in de EPROM en toch de voordelen te hebben van 64K aaneengesloten RAM.
De dynamische RAM ic’s hebben gemultiplexte adresingangen. De 16 adreslijnen van de Z80 worden gemultiplext met twee '157 (D29,30) ic's. Het een vertragingslijn opgebouwd uit 4 Inverters (D26) en een decoder (D23) (deze decoder wordt ook gebruikt voor het schakelen tussen Ram en EPROM) wordt op het juiste moment de Row Adress Strobe en Column Adress Strobe signalen aan het RAM gegeven. Een NAND-poort (D25) zorgt bij het schrijven in RAM voor verder vertragen van de CAS puls zodat er geen bus-conflicten optreden (lastig, bekijk dit maar eens in de Z80 documentatie).
De EPROM heeft twee enable signalen namelijk nOE en nCE. De nCE wordt gebruikt om de chip ‘weg' te schakelen. De 27128 staat dan in 'standby mode'. De nOE wordt als normale chip select gebruikt.
NOOT: Let op dat de adreslijnen van de dynamische RAM goed zijn aangesloten. De Z80 geeft op de adreslijnen A0-A6 na elke opcode- fetch een refresh adres af. Wanneer men bijvoorbeeld de aansluitingen A6 en A7 van de RAM verwisseld zal de refresh in bepaalde delen van de RAM uitblijven waardoor de meeste programma’s niet meer werken. Aangezien de Z80 maar 7 refreshbits afgeeft zal het meteen duidelijk zijn dat 8 bits refresh chips, zoals de Texas Instruments TMS4164 niet geschikt zijn.
Ook de 64k*4 chips (41464) hebben 8 bits refresh nodig. Met een schakeling van 2 TTL-IGs is dit te realiseren. Voor mensen die geen gebruik maken van de print is dit een compacte oplossing.

PARALLELLE INTERFACE

De Z80 PIO chip ligt in de IO-map op de adressen 10-13. Deze chip kent een speciale mode die het mogelijk maakt met 12 draden data te ontvangen en te versturen (bidirectionele interface). Deze mode wordt gebruikt voor communicatie met de ATOM. De overige IO-lijnen worden gebruikt voor de disk interface.
De PIO kan niet gebruikt worden voor bank-switching, omdat deze geen reset ingang heeft. Na vastlopen van een eens werkend programma zou dan de voeding aan en uit gezet moet worden om de EPROM weer voor te schakelen. Dit voorschakelen van de EPROM is namelijk noodzakelijk om de machine weer op te starten.

FLOPPYDISK INTERFACE EN CLOCK CIRCUITS

De Floppy Disk Interface is opgebouwd met een MB8877A of 1793 Floppy Disk Controller (FDC). Een MB8877A heeft geen 12V nodig zodat deze spanning dan niet meer nodig is op de print.
De FDC ligt op adres 00, 01, 02 en 03 in de IO-map. De gebruikte FDC is geschikt voor single en double density op 5 of B inch disk drives. De hardware rond deze chip is zo ontworpen dat softwarematig omgeschakeld kan worden tussen alle vier mogelijkheden op elk van de vier drives.
De dataseparator is opgebouwd met een teller van het type '193 (D9). Met behulp van een '153 (DB) multiplexer worden de juiste klokfrequenties voorgeschakeld, noodzakelijk voorde dataseparator en de FDC. Deze verschillende frequenties zijn afkomstig van een '393 (D7) teller.
De write-precompensatlon (250 nS) is opgebouwd met een schuifregister van het type '195 (D10). Het een one-shot van het type '123 (D12) wordt een puls gegenereerd van een seconde om de motor van de diskdrive tijd te gunnen om op toeren te komen. De andere helft van dit IC wordt gebruikt in de dataseparator. De '145 (D2) wordt gebruikt om de drive select code op disc interface te zetten. Dit IC beschikt over de noodzakelijke open collector uitgangen.
De uitgang DRQ {Data ReQuest) van de FDC hangt aan PB7 van de PIO. De CPU kan dan via de PIO zien wanneer de Floppy Disc Controller weer een byte klaar heeft (of nodig heeft in het geval van schrijven).
De DDEN van de FDC wordt bestuurd met PB2 van de PIO. Met PB4 van de PIO wordt de side select van de disc drive gestuurd. Ook in geval van een 1797 disc controller moet PB4 gebruikt worden.
Helaas wijst de praktijk uit dat SCHRIJVEN op 8 inch double density niet functioneert omdat de CPU de bytes net niet snel genoeg af kan leveren bij de FDC (het is moeilijk uit te leggen maar het lezen gaat wel goed). Door de processor-snelheid te verhogen naar 8 MHz Is dit probleem opgelost.
Voor sommige 8" drives is de wrlte-precompensatlon aan de hoge kant. Door de clock-ingang van de 74LS195 aan 8 MHz te hangen in plaats van aan 4 MHz wordt de write-pre-comp 125 nS. Voor moderne slim-sline drives zoals Teac, Mltsublshi mag de write-pre-comp helemaal uitgezet worden. Dit gaat als volgt verwijder de 74Ls195 en soldeer de WD uitgang van de 179X direct aan de 7406.

../../images/terug.gif OMBOUWEN NAAR 8 MHz

Aan de componenten zijde van de print loopt vanaf de zijkant een spoortje naar pin 4 van D7. U snijdt dit spoortje vlak bij het IC door en verbindt het met pin 3 van hetzelfde IC. Vervang, indien noodzakelijk, de volgende componenten:
  1. - Z80 PIO door een Z80 B PIO.
  2. - Z80 CPU door een Z80 H CPU.
  3. - 4164 RAMs door 120Ns types.
  4. - 27128 door een 250 Ns type.
In de praktijk blijkt dat 4164-150 van bekende merken goed functioneren. Z80 A PIO's van verschillende merken blijken ook op 8 MHz goed te werken. Voor de CPU is een 'B'-type vaak voldoende. Een uPD780-2 (6 MHz ) van fabrikaat NEC geeft echter zeer slechte resultaten.
De EPROM geeft over het algemeen helemaal geen probleem. Meestal zijn de standaard types al 250 Ns.

../../images/terug.gif UITZETTEN MOTOR ON/OFF

Als uw drives voorzien zijn van een direct drive motor en 'head load' inrichting, dan kunt u overwegen de motoren van de drives continu te laten lopen. Dit is als volgt te realiseren:
  1. Snijd het koperbaantje naar pin 16 van de floppy connector los en verbind pin 16 naar massa. De motoren van de drives zullen nu continu draaien.
  2. De 'motor on' tijd moet nu nog gewijzigd worden. Vervang C4 (was 100 mF) door 2m2. De wachttijd bij het activeren van een drive is dan ± 50 Ms. Dit is voldoende voor de zogenaamde 'head load'

../../images/terug.gif MONTEREN ONDER OF BOVEN DE DRIVE

Zorg voor voldoende afscherming bij montage dicht bij de disk drive. Bij montage direct op een disk drive zonder afscherming zal de instraling van de Z80 kaart zo groot zijn dat de drive niet functioneert. Disk drives hebben ook vaak last van instraling door monitoren en schakelende voedingen.

DE MEMORY HAP

De memory map ziet er na een reset als volgt uit:

0000-7FFF EPROM (er wordt een 16K EPROM gebruikt
8000-FFFF Random Access Memory

Als de EPROM is uitgeschakeld dan Is de map:

0000-FFFF RAM

De EPROM kan worden ingeschakeld door naar IO-adres 20 een willekeurig byte te schrijven.
Door naar IO-adres 21 te schrijven wordt de EPROM vervangen door het RAM.

../../images/terug.gif DE INPUT/OUTPUT ADRESSENINDELING

00FDC command en status register.
01FDC track register.
02FDC sector register.
03FDC data register.
10IO data register A
11PIO control register A
12PIO data register B
13PIO control register B
20EPROM inschakelen in gebied 0000-7FFF
21RAM inschakelen in gebied 0000-7FFF
30  -  3FVrij voor uitbreiding
40  -  FFKopieën van bovenstaande adressen.
Met extra decodering is deze ruImte ook
te gebruiken voor uitbreidingen.
De besturingslijnen BO-B7 van de PIO worden als volgt gebruikt:

B0,   B1Drive nummer
B2nDD I SD (omschakelen density)
B3n5 / 8 (omschakelen discgrootte)
B4side select
B5vrij (niet gebruiken voor bankswitching)
B6draadbrug voor 'double steps' (zie ATOMDOS)
B7ingang voor DRQ (Data ReQuest)

../../images/terug.gif WERKING BIDIRECTIONELE INTERFACE

De Z80-kaart wordt met behulp van een VIA (6522) aangesloten aan de ATOM. Het standaardadres van deze VIA is #BF90. In het onderstaande tijdvolgorde-diagrammetje (bron: ZILOG) is te zien hoe de PIO en 6522 communiceren. De volgende punten wil ik even benadrukken:
  1. De interface is asymmetrisch (dus 2 PIO's kunnen niet communiceren zonder extra hardware-aanpassing),
  2. De 6522 bepaalt of de PIO de datalijnen mag bezetten.
  3. De 6522 mag ten alle tijden de datalijnen bezetten indien de PIO niet geactiveerd wordt door het A-stb signaal.
  4. Er wordt NOOIT een byte kwijtgeraakt, Bij seriële interfaces is dit anders: indien men daar het dataregister van een chipje niet snel genoeg leegt wordt de data overschreven door nieuwe. De parallelle interface daarentegen geeft de handshake-lijn pas weer ‘vrij’ indien het afgeleverde byte door de CPU opgehaald is.
cpm-pio.gif
../../images/terug.gif DE BOOTROM VOOR DE Z80

De bootrom voor het Z80-kaartje is van het type 27128 (16 Kb). In deze EPROM staat o.a. de software die na een reset geëxecuteerd wordt.
Na reset of power-up gebeurt er het volgende:
  1. Er wordt een stuk van de EPROM naar RAM gekopieerd. Dan wordt er een JUMP-instructie uitgevoerd naar het RAM-gebied. De software die naar RAM gekopieerd is schakelt de EPROM weg, zodat de memory map geheel uit RAM bestaat.
  2. Er wordt gecontroleerd of er een disc drive aanwezig is met een floppy. Indien er geen disc drive of floppyaanwezig is, wordt er een simpele monitor opgestart (dit is handig voor testdoeleinden). Deze monitor is geschreven door Rolf Dieter Klein voor de MC-CP/M computer (lijst commando's zie pag. 17). Ik heb deze monitor gepatched voor gebruik met de Z80- kaart.
  3. Normaal gesproken is er altijd een disc aanwezig. Van deze disk wordt dan sector 1 op track 0 gelezen (track 0 is altijd single density). Indien de lengte van deze sector 128 bytes is dan is het een CP/M floppy. Deze 128 bytes vormen dan een programmaatje dat de BIOS van track 1 in zal laden. Deze BIOS zal dan de P2DOS en ZCPR2 uit EPROM kopiëren (in het bovenste stuk RAM zetten) zodat CP/M opgestart wordt.
  4. Een ACORN ATOM floppy heeft sectoren van Z56 bytes. Wanneer de lengte van de gelezen sector 256 bytes is dan wordt een communicatie programma (aanwezig in de EPROM) opgestart voor ondersteuning van de ATOM-dos. Dit stukje software leest en schrijft dan op bevel van de ATOM sectoren van/ naar schijf. Voor een juiste werking van de ATOM-dos is het noodzakelijk dat de draadbrug n40/80 op de kaart goed geselecteerd is. Het een 80-track disc-drive is namelijk 'double-stepping' nodig (indien men standaard 40-track floppies wil gebruiken). Zie verder 'De Gewijzigde Atom Dos Rom' .
  5. Als de eerste track niet single density is, dan is het een GDOS floppy (1/4 Kb sectoren) of een niet geformatteerde. De GDOS ondersteuning wordt dan opgestart.
../../images/terug.gif BIOS & SYSGEN & DCONF & FORMAT

Voor het draaien van CP/M software is een aan de hardware aangepaste Basic Input Output System (BIOS) noodzakelijk. Deze BIOS biedt het P2DOS gestandaardiseerde routines aan voor disk. terminal, printer etcetera.
De BIOS voor het Z8O-kaartje kent ook nog de mogelijkheid om ' vreemde ' diskformaten in te stellen. Met het programma 'DCONF' wordt de BIOS intern verbouwd zodat allerlei formaten gebruikt kunnen worden.
Nadat een drive voor een bepaald formaat is ingesteld kan met het 'FORMAT' programma een nieuwe schijf geformatteerd worden. Met het programma SYSGEN kan men op de systeemtracks van een geformatteerde floppy een BIOS zetten (alleen club-formaat! ).

../../images/terug.gif HET AANMAKEN VAN EEN BOOT FLOPPY VOOR P2DOS

Om op de normale wijze ' koud ' te kunnen booten moet de eerste track van de boot-floppy single density geformatteerd zijn. Het FORMAT programma vraagt hierna (128 bytes per sector).
Na het formatteren kan er een BIOS opgezet worden. Dit gaat m.b.v. het programma SYSGEN.COM. Met dit programma moet eerst een BIOS van een andere schijf gehaald worden, waarna het op de nieuwe schijf gezet kan worden.
LET OP: Bij standaard CP/M staan ook de BDOS en CCP op de systeemsporen. Echter bij dit systeem worden deze delen uit EPROM gekopieerd en staan dus niet op disk! Zodoende kan toch 'warm' geboot worden op een floppy zonder systeem. Wil men wijzigingen aanbrengen in het OS dan moet de EPROM opnieuw gebrand worden.

CONSOLE, LIST, PUNCH, READER input/ output.

De I/0 van deze devices geschiedt 'op afstand' via de ATOM. Aangezien er slechts sprake is van 1 'half-duplex' verbinding tussen de Z8O-kaart en de ATOM moet er een eenvoudig protocolletje gebruikt worden om de boel uit elkaar te houden. Dit protocolletje werkt als volgt: Van Z8O-kaart naar ATOM:
  • Een byte voor de video wordt vooraf gegaan door een byte FC.
  • Een byte voor de punch wordt vooraf gegaan door een byte FD.
  • Een byte voor de printer wordt vooraf gegaan door een byte FE.
  • Alle andere bytes zijn voor de video (extra snel: geen extra 'preamble' FC nodig).
  • Van ATOM naar Z8O-kaart:
  • Een byte voor het keyboard wordt vooraf gegaan door een byte FC.
  • Een byte voor de reader wordt vooraf gegaan door een byte FD.
  • De printer-status wordt voorafgegaan door een byte FE.
  • Alle andere bytes zijn voor het toetsenbord.
Dankzij een goede implementatie van de printerstatus kan met een bekend tekstverwerking programma tegelijk ge-edit en geprint worden. Wie heeft er nu nog een printer-buffer nodig?

../../images/terug.gif DE GEWIJZIGDE ACORN ATOM DOS

Vanwege de eenvoudige directory structuur van de ATOM-dos is het zeer eenvoudig en slechts weinig langzamer om de disc input/ output op afstand te laten gebeuren. Een file op een ATOM disc is een aaneengesloten rij van sectoren. Wanneer er een file in de ATOM geladen moet worden hoeft de ATOM alleen maar het sectoradres en het aantal sectoren bekend te maken aan de Z80. De Z80 laadt dan eerst de gewenste sectoren in het eigen werkgeheugen, waarna de hele hap met een snelheld van circa 10.000 bytes per seconde naar de ATOM wordt gestuurd.
Op de plaatsen in de oude DOS-ROM waar een aantal sectoren gelezen of geschreven moet gaan worden, wordt een sprong gezet naar de vervangende software die de taak uitbesteedt aan de Z80. Aangezien er maar twee mogelijkheden zijn (lezen en schrijven) is het patchen eenvoudig (dankzij ATOMWARE deel 2). Uiteraard wordt ook het drivenummer opgegeven aan de Z80.

Nu is het de ATOM om het even of er nu echt een ATOM schijf in de disc drive zit, of dat de Z80-kaart een ATOM schijf SIMULEERT. Men kan onder CP/M bijvoorbeeld een file van 100 kilobyte aanmaken. Alle lees en schrijf operaties kunnen dan worden gesimuleerd met deze file. Met een grote disc drive kan men 7 files van 100Kb aanmaken zodat 7 oude ATOM schijven passen op 1 CP/M schijf (er is nog ruimte voor een 'floppy' van 76 Kb).
Voor dit simuleren is een CP/M programma 'ATOMDOS' beschikbaar. Aan de hand van het ingestelde discnummer (in de ATOM) wordt de juiste file geselecteerd waarop de lees en schrijf operaties moeten worden uitgevoerd.
De files van 100Kb kunnen worden aangemaakt met 2 programma's:
  1. AACOPY: Dit programma kan ACORN ATOM schijven kopiëren naar een file onder CP/M (en vice versa).
  2. CREATE:  Dit programma creëert files van willekeurige lengte en initialiseert de directory.

HET PATCHEN VAN DE ATOM DOSROM

Voor het aanmaken van een dos-rom is het volgende noodzakelijk:
  1. Patch programma (zie pag. 20).
  2. Decados of TelecDos of AtomDos.
  3. Salfaa V1.5 of hoger op #A000. (symbolische assembler programma van de FAC)
Het patchen gaat als volgt:
  • Laad de originele DOS op adres #6000.
  • Laad (of intikken) het patch programma.
  • Pas indien nodig in het patch programma de equate VIA = #BF90 aan.
  • Run het patch-programma.
De aangepaste DOS-ROM staat op adres #6000.
Nu nog eventjes in een EPROM zetten.

HET GEBRUIK VAN ATOM DOS

De nieuwe ATOM-DOS is compatible met de oude. Alle min meer normale entrys zijn gelijk gebleven. Incompatibiliteit treedt zeker op wanneer een programma rechtstreeks gebruik maakt van de 8271 FDC. De volgende programma's commando's werken dus niet:
  • FORMAT, SECTOR, TYPE, LIST uit de DBOX. (De TYPE uit de DECADOS werkt wel. ) (DBOX en DECADOS zijn programma’s van de FAC)
  • Het FORMAT programma.
Bovendien worden sommige foutmeldingen niet gegeven. Indien een schijf write-protected is, wordt er bij het schrijven niet gereageerd met een foutmelding. Ook een BAD sector wordt niet gerapporteerd (vastloper). Op de redenen hiervan ga ik niet verder in.
Alle andere faciliteiten werken wel.
Ik noem o.a. :
  • Sequentiële en random files.
  • Gewoon laden en saven.
  • Bijna alle commando's uit de DBOX.
../../images/terug.gif

DISK NUMMERING

Bij gebruik van standaard ATOM single density floppies Is DRIVE nummering als volgt:
ATOM DRIVE 0, 4--->DRIVE A,side 0
ATOM DRIVE 1, 5--->DRIVE B,side 0
ATOM DRIVE 2, 6--->DRIVE A,side 1
ATOM DRIVE 3, 7--->DRIVE B,side 1

Bij het simuleren van ATOM floppies ligt de zaak iets anders:
ATOM DRIVE 0--->DRIVE A,CP/M file ATOMDOS.000
ATOM DRIVE 1--->DRIVE A,CP/M file ATOMDOS.001
ATOM DRIVE 2--->DRIVE A,CP/M file ATOMDOS.002
ATOM DRIVE 3--->DRIVE A,CP/M file ATOMDOS.003
ATOM DRIVE 4--->DRIVE A,CP/M file ATOMDOS.004
ATOM DRIVE 5--->DRIVE A,CP/M file ATOMDOS.005
ATOM DRIVE 6--->DRIVE A,CP/M file ATOMDOS.006
ATOM DRIVE 7--->DRIVE A,CP/M file ATOMDOS.007
../../images/terug.gif

HET AANMAKEN VAN EEN ATOM FLOPPY

Het aanmaken van een ATOM floppy is niet eenvoudig. Voor aanmaken van een standaard single density floppy gaat men beste als volgt te werk:
  • Start CP/M op (ATOM is terminal).
  • Stop In drive A een floppy met de programma's DCONF en FORMAT.
  • Stel m.b.v. DCONF drive B in voor ATOM 40 tracks.
  • Roep het format programma aan en formatteer de (lege) schijf met drive B
Met een truuk Is het bovenstaande ook uit te voeren met slechts 1 drive: Sluit In drive A ook de jumper voor drive B select aan. De drive werkt nu als drive A en B. Met enkele keren verwisselen van schijven is het dan mogelijk vreemde formaten te formatteren.
De net geformatteerde schijf staat nu vol met bytes #E5.
De directory is dus nog niet geinitialiseerd.
Start de ATOM met ATOMDOS op. Gebruik nu het ATOM-programma INITDIR om de net geformatteerde schijf te voorzien van een lege directory.
Wil men het programma ATOMDOS gebruiken voor het verkrijgen van meer opslagcapaciteit dan is het aanmaken nog ingewikkelder. Allereerst moet een floppy geformatteerd worden voor CP/M (eerste track single density). Vervolgens moet er een speciale BIOS opgezet worden m.b.v. SYSGEN (een BIOS zonder protocollje voor een printer etc.). Deze BIOS zorgt voor het automatisch opstarten van het programma ATOMDOS {moet er ook opgezet worden). M.b.v. het programma CREATE of AACOPY moeten er nog ATOMDOS.00? files gemaakt worden. Gebruikt men het programma CREATE dan kan men een afwijkende grootte instellen. Neem bijvoorbeeld meer dan 100Kb als er grote files in moeten, neem minder dan 100Kb indien er bijv. 31 'one-liners' op moeten. Men is dan wat betreft disc-cap. niet meer compatible. Met AACOPY kunnen dan geen floppies meer uitgewisseld worden.
PAS OP: Bij het gebruik van standaard ATOM-floppies hoeft de Z80- kaart slechts 1 keer gereset te worden {met de ATOM-floppy in de drive). Bij het verwisselen van 'simulatie'-floppies is de kans groot dat een floppy de zogenaamde 'Read Only' status krijgt. Een schrijf-poging resulteert dan in het vastlopen van de ATOM-dos. Om dit te voorkomen moet men bij verwisselen van 'simulatie'- floppies een reset geven aan de Z80-kaart. Door de ‘simulatie'- floppies 'gestandaardiseerd' aan te maken worden ook de 'R/O' errors vermeden.
Aan de volgende eisen moet voldaan zijn:
  • De files moeten steeds in dezelfde volgorde op de schijf gezet worden.
  • De files moeten van dezelfde grootte zijn.
  • Er mogen geen files gedelete zijn.
Voor de wat meer ingewijden:
De directory van de CPIM floppies moet exact hetzelfde zijn om bij verwisseling geen 'R/O' status te veroorzaken.

HET OPSTARTEN VAN ATOMDOS

Stop een atomfloppy in de drive. Reset vervolgens de Z80 kaart. Tik dan op de ATOM in: *DOS. De DOS moet dan werken. Gebruikt men standaard ATOM 100Kb schijven dan hoeft de Z80 kaart niet opnieuw gereset te worden bij het verwisselen van schijven. Bij gebruik van gestandaardiseerde simulatie floppies is de reset bij floppy-wissel ook overbodig.
Na elke reset van de Z80 kaart moet op de ATOM opnieuw *DOS ingetikt worden.
../../images/terug.gif

GDOS MET DE Z80 KAART

De 'namaak' -GDOS is wat betreft commando's en OS-calls geheel compatible met het origineel. De volgende veranderingen zijn merkbaar voor de gebruIker:
  • De DOS werkt langzamer i.v.m. de extra communicatie.
  • Het VERIFY commando verifieert de gehele disk.
  • Sommige foutmeldingen kunnen niet voorkomen.
  • De entrys in de ROM zijn verschillend. Programma's die rechtstreeks in de ROM springen moeten worden aangepast.
  • De commando's *#40, *#80 werken zonder dat daarvoor een hardware uitbreiding nodig is. Een 80-track drive is dan wel noodzakelijk. Zorg dat de jumper op de Z80 kaart goed staat !

HET OPSTARTEN VAN GDOS

  • Stop een double density GDOS floppy (een niet geformatteerde mag ook) in drive A.
  • Reset dan de Z80 kaart.
  • Op de ATOM moet nu de gewijzigde GDOS op worden gestart.
  • Nu moeten alle commando's werken.
  • M.b.v. *ENABLE en *FORHAT kan men floppies formatteren.
  • De Z80 kaart hoeft nu niet meer gereset te worden.
  • Bij hernieuwd opstarten van de ATOM (break) hoeft men alleen maar
  • *DOS te tikken en het systeem is al weer klaar voor gebruik.

TIP: Aangezien de GDOS correcte foutmeldingen geeft, en bovendien sneller is, raad ik de zorgeloze gebruiker GDOS aan. Voor sommige toepassingen is de ATOMDOS, dankzij ondersteuning van sequentiële en random files, geschikter.
../../images/terug.gif

TERMINAL SOFTWARE

Deze terminal software is noodzakelijk voor het draaien van CP/M,
Er zijn drie versies beschikbaar:
  1. Voor gebruik met de club 80-kolommenkaart (EF9345) VDU80
  2. Elektuur-achtige (6845),
  3. Universeel, voor gebruik met een ATOM video driver.
Alle I/0 voor CP/M (behalve disk I/O ) wordt via de ATOM gedaan. De terminal bevat o.a. de volgende delen:
  • 80 kolommen driver. Deze emuleert een ADM-31 (Televideo 950) terminal. Deze driver kan o,a, het volgende:
  • regels inserten en deleten, (*)
    • het invoegen en deleten van karakters in een regel, (*)
    • instellen intensiteit karakters, (*)
    • verplaatsen van de cursor.
    • het instellen van het scrollgebied, (*)
    • het definiëren van de functietoetsen,
    • het definiëren van de cursortoetsen.
  • (*) Deze zijn niet beschikbaar op de universele terminal. De universele terminal maakt gebruik van de al in de ATOM aanwezige video driver (16*32, 24*32, 24*40, 24*64). Voor een compleet overzicht van de mogelijkheden zie appendix C en D
  • Toetsenbord driver. Deze werkt geheel onder interrupt. Elke 4 milliseconde wordt het toetsenbord gescand. Zodoende is typeahaed onder alle omstandigheden gewaarborgd. Deze driver heeft 'two-key rollover' en auto-repeat, Zodoende is 'REPT' toets vrij. Deze wordt gebruikt als een 'SUPER- SHIFT' voor functietoetsen. Het de implementatie van deze functietoetsen is een truc uitgehaald om ervoor te zorgen dat er 'line-editing' mogelijk is net zoals bij de ATOM.
    Indien het eerste karakter van de inhoud van een functietoets gelijk is aan Ctrl-@, dan wordt de rest van de tekst direct naar de interne video-driver gestuurd. Hen kan zo de cursor op het scherm verplaatsen. De video-driver heeft ook nog een escape-sequence waarmee het character onder de cursor verstuurd kan worden. Laat men de copy-toets deze code intern naar de video driver sturen, dan is het mechanisme compleet.
    Bij een tekstverwerkingsprogramma moeten de cursor-toetsen en copy-toets anders gedefinieerd zijn. De terminal heeft een paar escape sequensen waarmee omgeschakeld kan worden tussen de twee modes.
  • Buffers. Alle 'stromen' (toetsenbord, beeldscherm, printer) zijn gebufferd. Zodoende wordend er geen karakters gemist.

HET AANPASSEN VAN DE TERMINAL

Bij het aanpassen van de terminal is kennis van de geheugenindeling van de betreffende ATOM noodzakelijk. De volgende adressen kunnen (moeten) aangepast worden:
  • Het adres van de VIA. Dit is de VIA waarmee de Z80-kaart aangesloten is. Ik heb gekozen voor #BF90.
  • Het adres van de PRTVIA. Dit is de standaard ATOM-VIA met centronics printerinterface. Standaard #B800.
  • Het adres van de CODE en adres van de RAM. Aanpassen aan eigen geheugenideling.
  • De klokfrequentie moet worden ingevuld. Meestal 1.000.000 Hz.
  • Indien men de standaard VIA (#B800) gebruikt voor communicatie met de Z80 kaart moet het adres van de printer VIA verzet naar een stukje leeg geheugen. Stuurt men iets naar de printer (is er niet) dan …… dag.
  • Indien 6845, adres video geheugen, en controller.
  • Initialisatie tabel van de video controller (9345 en 6845)
  • Bij de universele terminal moet de schermafmeting worden ingevuld. Bovendien moet goed opgelet worden dat de printer niet meer bestuurd wordt door de standaard video driver. De terminal kijkt of de video driver begint met JSR #FEFB. Indien zo, dan wordt de sprong naar de driver 3 bytes opgeschoven. Pas dus op met drivers die de printer besturen en die niet beginnen met JSR #FEFB.
  • Bij de universele terminal is graphics mogelijk in combinatie met VDU.JH. Hiervoor moeten jump adressen ergens in de code worden aangepast. Bovendien moet met een ander programma (GRP- SRC) ergens graphics routines neergezet worden. Het behulp van het *SAVE commando kan dan de vertaalde termi.nal en graphics routines in 1 file worden weggeschreven.
Alle versies van de terminal hebben 8Kb (#8000 - #9FFF) video geheugen nodig. De universele heeft daarnaast nog ruimte (3Kb) nodig voor de functietoetsen buffers (het video geheugen kan nodig zijn voor VDU.JH !! ). Voor het assembleren is een volledig gevulde (#2900 - #9FFF) ATOM nodig. Uiteraard is SALFAA nodig.

MINIMALE TERMINAL

In het Acorntjedbrood nr. 5.2 is een zeer minimale terminal gepubliceerd door Paul Klomp. Deze laat zich snel intikken en is dus geschikt voor testdoeleinden.
../../images/terug.gif

APPENDIX A: STEPRATE PATCHES

Op de hieronder genoemde adressen mag men alleen de volgende waarden invullen:
00voor6 Ms steprate
01voor12 Ms
02voor20 Ms
03 voor30 Ms
In de EPROM staan op de volgende adressen de steprates gedefinieerd: 0D1F en 381F. Op 0D1F staat de steprate die gebruikt wordt bij reset en ATOMDOS. Voor GDOS ondersteuning staat de steprate op adres 381F.

In de programma's SYSGEN en RSECT moet men adres 0102 (na laden met ZSID) wijzigen. Na wijzigen met SAVE commando weer wegschrijven.

In het programma AACOPY moet adres 300C gewijzigd worden.

Alle bovengenoemde adressen bevatten 00. De steprate is dus 6 Ms.
../../images/terug.gif

APPENDIX B: HET PATCHEN VAN DE BIOS

Voor het veranderen van de drive-instellingen is nogal wat handigheid nodig. Ik volsta met het geven van een paar voorbeelden.

Voorbeeld 1) Drive A en B zijn dubbelzijdige 40 track drives.
Voor drive B: komt een dubbelzijdige 80 track drive in de plaats.
Hoe moet nu de BIOS gewijzigd worden zodat drive B: een capaciteit krijgt van 790 Kb? Ga als volgt te werk:
  • Start CP/M 'koud' op van drive A:
  • Start het programma ZSID op en wijzig drive type B (zie patch tabel). Wijzig de inhoud van adres EEB4H van 21h naar 30h.
  • Verlaat ZSID met ctrl-C. Stel m.b.v. DCONF drive B in voor BigBoard 790 Kb.
  • Het moet nu mogelijk zijn floppies te formatteren met drive B, en er vervolgens files op te zetten mbv kopieerprogramma's.
  • Nu moet de BIOS nog op de systeemtracks van een floppy gezet worden. Dit gaat als volgt: Start het programma ZSID op en laad tegelijk het programma SYSGEN.COM mee. Start het programma SYSGEN met een breakpoint op adres 0 (G100,0). Laad met sysgen een bootsector in het geheugen (met oude BIOS). Door vervolgens return te tikken komt men terug in de debugger. Nu kan met het verplaats commando (MEE00,FE00,1F80) de BIOS gekopieerd worden naar adres 1F80. Start nu het programma sysgen weer op vanuit de debugger (G100). Nu moet men geen source drive opgeven, alleen de destination drive (moet A zijn).
  • Van de (40 tracks) floppy waar zojuist de nieuwe BIOS opgezet is, moet koud opgestart kunnen worden met drive B ingesteld voor 790 Kb.

Voorbeeld 2) Beide 40 track drives worden vervangen door dubbelzijdige 80 track drives. Ga als volgt te werk:
  • Sluit een 80 track aan als drive B (i.p.v. de 40 tracks drive).
  • Wijzig m.b.v. ZSID het drive type B (zie Vb1).
  • Gebruik DCONF om drive B in te stellen voor BigBoard 790 Kb.
  • Formatteer een schijf met drive B.
  • Zet er vast een stel utilities op zoals FORMAT, ZSID, SYSGEN en DCONF.
  • Blijf ingelogd op drive A. Verander met ZSID de drive volgorde tabel. Nieuwe inhoud: 01 00 02 03. Verlaat ZSID met ctrl-C. Schrik niet: drive A en B zijn nu verwisseld voor P2DOs. De 80 track drive is nu drive A voor P2DOS.
  • Wijzig met ZSID nu ook drive type A (voor P2DOS drive B) naar 80 tracks (nieuwe inhoud adres EE6A wordt 30h). Met DCONF drive B instellen voor BigBoard 790 Kb. Nu met ZSID en SYSGEN een bootsector van drive A ophalen (voor SYSGEN is de volgorde van de drives niet veranderd). Verplaats de BIOS (MEE00, FE00, 1F80). Op adres 1FBE staat de drive volgorde tabel. Terugpatchen naar 00 01 02 03. Nu met SYSGEN de BIOS wegschijven naar drive B (de 80 tracks drive).
  • Sluit de tweede 80 track drive aan als drive A.
  • Met de net aangemaakte floppy moet nu opgestart kunnen worden.
Voorbeeld 3) Het aansluiten van een high density drive. Deze drives hebben 2*80 sporen van 10416 bytes ongeformatteerd. De datasnelheid komt overeen met die van 8" drives. Zorg dus voor CPU-klokfrequentie van 8 MHz.
De verspreidde BlOSsen zijn al ingesteld op dit type drives (drive C en D). De opslagcapaciteit bedraagt 1440 Kb per schijf.
M.b.v. het drive-volgorde tabelletje kan men de drive ook als drive A laten werken zonder jumpers om te zetten in de drive. Wil men zonder gebruik van de drive tabel zo'n drive als drive A gebruiken, dan moet de source van de BIOS gewijzigd worden.
Verander bijv. de tabel naar 02 03 00 01. De al aanwezige 5" drive werkt nu als drive C. Let wel op: de programma's RSECT en SYSGEN kijken niet naar deze tabel.
Noot: Voor TEAC G modellen moet de write prec. uitgezet worden. Mijn YE-DATA drives, model YD38OT, vereisen wel precomp.

PATCHTABEL VOOR DE BIOS

					; head load time 50 ms 
EE3C 	3C 				hl.time: 	 db 	60 
					; head settIe time 25 ms 
EE3D 	1E 				hs.time: 	 db 	30 
					; drive redefinition table 
EE3E 	00	01	02	03 	dr.tab: 	 db 	0,1,2,3 
					; see zcpr2 manual 
EE42 	01	00	00	00 	PATHINIT: db 	1,0, 0,0
EE46 	00	00	00	00 		 db 	0,0, 0,0 
EE4A 	00 					 db 	0 
		; type of the selected drive 
		; bit 0,1 steprate 3, 6, 10, 15 Ms 
		; bit 2: 	doubles steprate 
		; bit 3: 	0 
		; bit 4: 	0	40(77) 	1 80 trk 
		; bit 5: 	0 	single 	1 double side 
		; bit 6: 	0 	mini 	1 maxi floppy 
		; bit 7: 	0 
EE6A 	30 	A.TY.DRV: DB 	30H 	; 5" DS 80-TRK 
EBB4 	30 	B.TY.DRV: DB 	30H 	; TEAC F 
EEFE 	70 	C.TY.DRV: DB 	70H 	; 8" DS 80-TRK 
EF48 	70 	D.TY.DRV: DB 	70H 	; TEAC G 
Enkele voorbeelden van drive types 
; 07h 	voor 	5" SS 40 trks,	30	Ms steptime 	(hele oude Shugarts)
; 21h 	voor 	5" DS 40 trks,	6	Ms steptime 	(TEAC B) 
; 40h 	voor 	8" SS 77 trks,	3	Ms 		(standaard 8") 
; 60h 	voor 	8” DS 77 trks,	3	Ms 		(dubbelzijdig 8") 
../../images/terug.gif

APPENDIX C: 6845 EN EF9345 TERMINAL

Bell 		^G 	Right 		^L 
Backsp/left 	^H 	Carriage return 	^H
Tabulate 		^I 	Clrscreen, home 	^Z 
LF/down 		^J	Home 		^^
Up 		^K 	Delete 		#;F 
Normal video 			ESC 	(
Low Video 			ESC 	J 
Clear screen 			ESC 	*
Char insert 			ESC 	Q 
Char delete 			ESC 	W 
Line insert 			ESC 	E 
Line delete 			ESC 	R 
Clear end of line 			ESC 	T 
Clear end of screen 		ESC 	Y 
Set cursor pos 			ESC 	*line+20H column+20H 
Terminal reset 			ESC 	00H 
Auto LF on			ESC 	01H 
Program function key nr 		ESC 	06H nn ss text ss 
Define scroll window 		ESC 	0DH tt bb 
Auto LF off			ESC 	0EH 
Erase to eol with CR on 		ESC 	0FH 
Erase to eol with CR off 		ESC 	10H 
Set cursor display 		ESC 	13H nn (6845) 
Poke ln CRTC or DP 		ESC 	16H rr dd 
Ask for the contents of key nn 	ESC 	17H nn 
terminal returns:			ESC 	17H nn FFH text FFH 
Set line-editing cursor keys 	ESC 	18H 
Set ‘wordstar' cursor keys 		ESC 	19h
Set dim/ underline/ blink/ inverse	ESC 	G 4/ 5/ 6/ 7 (EF9345) 
Reset attributes 			ESC 	G 0/ 1/ 2/ 3 (EF9345) 
Special keyboard functions: 
^O 	terminal reset 			^4 	on-line 
^1 	clock off (6845 terminal) 		^5 	local 
^2 	clock on ( " ") 			^6 	CP/M 	cursor & function keys
^3 	not used 				^7 	WS 	cursor & function keys 
Function key numbers:
@ 	0 	RETURN 	32 	(Add 8 if shifted) 
A-Z 	1-26 	DELETE 	33 	(Add 8 if shiftedJ 
[ 	27 	COPY 	34 	(Add 8 if shifted) 
\ 	28 	curs R-L 	35 	(Add 8 if shifted) 
] 	29 	curs U-D 	36 	(Add 8 if shifted) 
^ 	30 
Note: When the first char of a programmed key is a ^@ (00H) 
then the rest of the key contents is send to the internal video driver.
This is used for Atom-like cursor & copy keys.
../../images/terug.gif

APPENDIX D: STANDAARD TERMINAL

Bell 			^G 
Backspacelleft 		^H 
Tabulate			^I
Linefeed/down 		^J 
Up 			^K 
Right 			^L 
Carriage return		^M
Clear screen, home 	^Z 
Home 			^^
Clear screen 			ESC 	* 
Set cursor pos 			ESC. 	*	line+20H column+20H 
Terminal reset 			ESC 	00H 
Auto LF on 			ESC 	01H	
Auto LF off 			ESC 	0EH 
Program function key nr nn 		ESC 	06H 	nn ss text ss 
Ask for the contents of key nn 	ESC 	17H 	nn 
	terminal returns: 		ESC 	17H 	nn FFH text FFH 
Set line-editing cursor keys 	ESC 	18H 	
Set 'wordstar' cursor keys 		ESC 	19h 
Clear graphics screen 		ESC 	1BH 	mode 
Plot (modes same as in atom) 	ESC 	1CH 	mode xl xh yl yh 
Special keyboard functions: 
^O 	terminal reset 		^4 	on-line 
^1 	clock off (6845 terminal! 	^5 	local 
^2 	clock on ( " ") 	^6 	CP/M 	cursor & function keys
^3 	ot used 			^7 	WS 	cursor & function keys 
Function key numbers:
@ 	0 	RETURN 	32 	(Add 8 if shifted) 
A-Z 	1-26 	DELETE 	33 	(Add 8 if shiftedJ 
[ 	27 	COPY 	34 	(Add 8 if shifted) 
\ 	28 	curs R-L 	35 	(Add 8 if shifted) 
] 	29 	curs U-D 	36 	(Add 8 if shifted) 
^ 	30 
Note: When the first char of a programmed key is a ^@ (00H) then 
the rest of the key contents is send to the internal video driver.
This is used for Atom-like cursor & copy keys.
../../images/terug.gif

APPENDIX E: MONITOR

COMMANDO's

A	Werkt niet. 
B 	Invoer blokkeren (nuttig ??). Opheffen met ctrl-^ 
C 	Werkt niet. 
D <beginadr>,<eindadres> 
	Hexadecimale dump van het geheugen 
E 	Genereert INTEL-hexformaart EOF. 
F <beginadres>,<eindadres>,<waarde> 
	Vult geheugen met konstante waarde 
G <adres>[ ,<breakl>[ ,<break2>]] 
	Start programma. Er kunnen 2 breakpoints opgegeven worden.
	Voor gebruik eerst I - register mbv ‘X' op #FF zetten. 
H <x><y> Berekent som en verschil van x en y. 
I 	Kopieert standaard BIOS uit EPROM. 
J 	Eenvoudige geheugen-test. Inhoud wordt niet veranderd. 
M <beginadres>,<eindadres>,<dest.adres> 
	Intelligent verplaats commando. 
N 	Werkt niet. 
P<adres> 	Invoer van text van keyboard naar adres. 
	Met '-‘ kan laatste teken gewist worden. Afsluiten met ctrl-D. 
QI<poortadres>		Uitlezen IO-poort. 
QO<prtadres>,<waarde>	Schrijven naar IO-poort 
R[<bias>[ ,<reladres>]] 	Inlezen INTEL hex-files over keyboard. 
S<adr> 			Modificeren van geheugen. 
Met spatie naar volgende geheugenplaats,
met ‘_’ naar vorig~. Met RETURN afsluiten. T<beginadres>,<eindadres> ASCII dump van het geheugen. U Werkt niet. V<beginadres>,<eindadres>,<adres2> Vergelijk 2 geheugenstukken. W<beginadres>,<eindadres> Intel hex uitvoer. X[<register>] Display register inhoud. Als er een register gespecificeerd is kan de inhoud veranderd worden. Y<waardel>[,<waarde2>,. ..] Zoek naar volgorde van bytes. Z Geeft hoogste vrije adres (#EFFF). De monitor staat op adres F000h. Aan het begin ervan staat een Jump-tabel: F000 JP BEGIN ; Koude start monitor (eerst floppy etc. ) F003 JP Cl ; Console input. Char in reg. A F006 JP RI ; Was Reader-In. Werkt niet F009 JP CO ; Console out. Char in reg. F00C JP POO ; ?? FOOF JP LO ; ?? F012 JP CSTS ; Status, A=FF ==> toets ingedrukt. F015 JP IOBYTE ; ?? F018 JP IOSET ; ?? F01B JP MEMCK ; ?? F01E JP RESTART ; Print registers en PC, warme start.
De restart kan goed gebruikt worden om uit een testprogramma weer in de monitor te komen. Met het ‘X’ commando kan men dan de registers bekijken.
../../images/terug.gif

APPENDIX F: ZCPR2

COMMANDS:

DU: 	The DU form standing alone is used to log into a different directory. 
	There are three basic forms of this command -- 
		Change Disk 		D: 
		Change User 		U: 
		Change Disk and User 	DU: 
	A file may be preceded by DU: to indicate the disk and user. 
DIR 	Display files. 
		Display $DIR File Names DIR DU	:	afn 
		Display $SYS File Names DIR DU	:	afn S 
		Display All File Names DIR DU	:	afn A 
ERA 	Erase files. 
		Erase Specified Files ERA 	DU	:	afn 
		Erase with Verify ERA 	DU	:	afn V 
REN 	Rename file. 
		Rename File 	REN 	DU	:	ufn1=ufn2 
TYPE 	Type file on screen. 
		Type File Without Paging 	TYPE DU	:	ufn P 
		Type File With Paging 	TYPE DU	:	ufn 
LIST 	List file on Printer. 
		List File With Paging 	TYPE DU	:	ufn 
SAVE 	Save the contents of the TPA. 
		Save Hemory into File 	SAVE n 	DU:ufn 
		Save Memory into File 	SAVE n 	DU:ufn s 
	n may be decimal (default) or hexadecimal (followed by "H"). 
	When the S option is specified, n refers to the number of 
	128 bytes blocks instead of 256 byte pages. 
GET 	Load a file into memory. 
		Load File Into Memory 	GET adr 	DU:ufn 
	Adr must be hexadecimal 
GO 	Reexecute the last program loaded. 
		Reexecute Last Transient 	GO params 
JUMP 	Branch to anywhere in memory. 
		Call Subroutine 	JUMP adr 
	Adr must be hexadecimal. 
The following facilities are enabled: 
	-searchpath for *.COM files at address 0040H 
	-standard CP/M submit !$$S.sUB). 
	-Multiple command line buffer at address FB40H 
../../images/terug.gif

APPENDIX G: ATOMDOS commando’s

*CAT 	inhoud schijf 
*DELETE 	delete een file 
*DIR 	laden directory 
*DRIVE 	specificeren drive 
*EXEC 	vergelijk submit bij CP/M 
*GO 	?? 
*INFO 	informatie van een file 
*LOAD	van een file 
*LOCK 	beschermen tegen wissen of schrijven 
*MON 	enable meldingen 
*NOMON 	disable meldingen 
*RUN 	laden en runnen 
*SAVE 	saven file 
*SET 	setten qualifier 
*SHUT 	sluiten file(s)
*SPOOL 	uitvoer op beeldscherm ook naar file 
*TITLE 	wijzigen titel van een disk 
*UNLOCK 	file wordt weer Read/Write 
*USE s	etten qualifier ? 
../../images/terug.gif

LISTING PATCH PROGRAMMA

100 PROGRAM D-PATCH-salfaa 
110 
120 REM 	DOS patchen voor bidirectionele 1/0 Z80-kaart 
130 REM 	gebruikt salfaa V1.5 
140 REM 	voor schema V1A-P10 d.d. maart 1986 
150 REM 	verwacht ACDOS / DECADOS op #6000 
160 
170 PASS2;GOSUBa 
180 PASS1;GOSUBa 
190 END 
200 
210a ASM-B 
220 .TABLE#9800,#9FF0 
230 .LIST 
240 .OPT #40 				\ P-Charme uit 
250 
260:via=#B400 
270 
280 .CODE #E000;.RAM #6000; NOP		\voorafje 
290 
300 .CODE #E000;.RAM #6000
310 	LDA @#FF;STA via+12 
320 	LDA @#FF;STA via+12 , 		\opvullen ruimte 
330 
340 .CODE #E112;.RAM #6112 
350:sect 
360	LDA @#FF;CLC;ADC #AO;LDA #Al;ADC @0;STA #CB 
370 	LDA @#13;JSR put’byte 
380	LDA #A3;JSR put’byte;LDA #A2;AND @#F;JSR put’byte 
390 	LDA @#0E;JSR put’byte;LDA #CB;JSR put’byte 
400	LDA #9C;STA #F6;LDA #9D;STA #F7;RTS;RTS;RTS 
410 
420 .CODE #E220;.RAM #6220 
430 	JHP #FFED;JSR #E731 
440 	NOP;NOP;NOP;NOP;NOP;NOP;NOP;NOP;NOP;NOP 
450 
460 .CODE #E4A3;.RAM #64A3 
470 	NOP;NOP;NOP;LDA @#00 
480 	STA #AD;JSR sect 
490:label 
500	JSR dsk’nr;JSR read’wr;te;LDA #CB;BEQ done 
510:rept 
520	JSR get’put;INY;BNE rept;INC #F7;DEC #CB;BNE rept 
530:done 
540 	RTS 550 
560 .CODE #E6B0;.RAM #66B0 
570 	NOP;NOP;NOP 580 
590 .CODE #E6FF;.RAM #66FF 
600 	RTS . 
610 
620:init 
630 	JSR vreet;LDA @#DD;STA via+12;LDA @#FF;STA via+12 
640:vreet 
650	BIT via+O;BVC klaar;JSR get’byte;JSR #FE66;JMP vreet 
660:klaar RTS 
670 
680 .CODE #E731;.RAM #6731 
690 LDA @#00;JMP motor 
700 
710 .CODE #E74A;.RAM #674A 
720 	LDA @#4B;JMP motor 
730 
740 .CODE #E75B;.RAM #675B 
750 	RTS , 				\start motor 
760:motor 
770 	STA #AD 
780 	LDA @#13;JSR put'byte;LDA @o;STA #F6;JSR put’byte;JSR put’byte
790	LDA @14;JSR put'byte;LDA @2;STA #CB;JSR put’byte 
800	LDY @#20;STY #F7;JMP label 
810:get'put 
820 	BIT #AD;BVC get 
830 	LDA (#F6),Y;JMP put’byte 
840:get JSR get'byte;STA (#F6),Y;RTS
850 
860:get.byte 
870 	BIT via+O;BVC get.byte 
880	LDA @#FD;STA via+12;LDA via+1;PHA 
890	LDA @#FF;STA via+12;PLA;RTS
900 
910:put'byte 
920 	BIT via+0;BPL put'byte;STA via+1;PHA 
930 	LDA @#FF;STA via+3
940 	LDA @#DF;STA via+12;LDA @#FF;STA via+12 
950 	LDA @#00;STA via+3;PLA;RTS 
960 
970:dsk’nr 				\ stel disknummer in 
980	LDA @#04j;JSR put’byte;LDA #EE;AND @#07 
990	ORA @#30;JMP put’byte 
1000 
1010:read’write 				\ stuur read/write-commando 
1020	JSR vreet;LDA @#17;BIT #AD;BVS put;LDA @#12 
1030:put 
1040 	LDY @0;JMP put’byte 
1050 
1060 .CODE #EF13;.RAM #6F13 
1070 	JMP init 
108O 
1090 .END 
1100 ?#643C=#38;?#6440=7;REM DISK 0. .7 
1110 RETURN 
../../images/terug.gif