Z80 processor

Deze pagina gaat over mijn eerste microprocessor waar ik jarenlang mee geprogrammeerd heb en die ik van binnen naar buiten kende, de Z80 processor. Toen ik 1972 geïnteresseerd raakte in computers was er voor de hobbyist nog niets verkrijgbaar behalve wat boeken die ik dan ook las. Pas een paar jaar later kwam Elektuur met een SC/MP processor board maar dat was voor mij toen onbetaalbaar. Ik heb wel veel theoretische kennis opgedaan door alles hiervan te lezen. Toen ik in 1979 twintig jaar oud was kocht ik mijn eerste echte computer, de Tandy TRS-80 model I level II met als hart een Z80 processor. Binnen de kortste keren kon ik hiervoor in assembler programmeren en schreef ik complexe assembler programma’s voor de Z80 processor. Daarna hadden al mijn computers een Z80 processor zoals de Sinclair Spectrum en later de MSX. Na mijn ICT opleiding was ik Pascal en Cobol programmeur, maar mijn eerste baan was hardware en software ontwikkelen op embedded Z80 systemen (kassa en machinesturing systemen) in assembler en PL/Z. Daarna ging ik werken bij Micro Technology (een MSX hardware leverancier) en programmeerde ik weer Z80, maar nu in C en assembler. Pas daarna werd de 8031 processor mijn tweede liefde en heb ik ook voor deze processor veel code geschreven in assembler en C. Ik heb zo lang en zo vaak gebruik gemaakt van de Z80 processor dat ik dit ook wel mijn eerste liefde in processorland noem. Na heel veel jaren heb ik weer de Z80 opgepakt en op deze pagina kunt u informatie vinden over oude en nieuwe Z80 projecten en de nodige documentatie vinden. De Z80 was voor zijn tijd een geniaal ontwerp en de grap is dat deze processor heel veel gebruikt is (en nog steeds gebruikt wordt), in onder meer in de Nintendo Gameboy maar ook in de Texas Instrument wetenschappelijke rekenmachines.
Vriendelijke groet, Hein Pragt.
This page is about my first microprocessor that I have used for years and that I knew from the inside out, the Z80 processor. In 1972 when I became interested in computers, there was nothing on the market for the hobbyist beside some books that I read. Only a few years later the magazine Elektuur came with an SC/MP processor board but that, at that time, was not unaffordable for me. I did gain a lot of theoretical knowledge by reading everything I could. In 1979, when I was twenty years old, I bought my first real computer, the Tandy TRS-80 model I level II that used the Z80 processor. In no time I was able to program assembler and write complex assembler programs for the Z80 processor. After that all my computers had a Z80 processor like the Sinclair Spectrum and later the MSX. After my IT education I was a licensed Pascal and Cobol programmer, but my first job was hardware and software for embedded Z80 systems (cash register and machine control systems) in assembly and PL/Z. I started working with Micro Technology (a MSX hardware supplier) and again was programming the Z80, but now in C and assembly. A few years later we switched to 8031 processors, who became my second love and also for this processor I have written a lot of code in assembler and C. I have used the Z80 processor so long and so often that I called this my first love in processor land. After many years I have picked up the Z80 again and you can find information on this page about old and new Z80 projects and designs. The Z80 was a very fine design and its funny that this processor is still used, like in the Nintendo Gameboy but also in the Texas Instrument scientific calculators.
Regards, Hein Pragt.

Z80 workbensch editor en emulator / debugger

Om voor de z80 te kunnen programmeren heeft u een assembler of compiler nodig. Ik vind het persoonlijk nog steeds leuk om in Z80 assembler te schrijven maar ik kon geen tools meer vinden voor Windows 10. Er was nog wel wat te downloaden maar het meeste werkte op DOS niveau. Na wat rond zoeken besloot ik dat tijd was voor een nieuw hobby project, het bouwen van een complete geïntegreerde Z80 ontwikkel omgeving. Ik vond een vrij goede assembler en goede portable C code van een emulator en de rest had ik nog ergens in mijn code bibliotheek. Het resultaat is Z80-workbench geworden, een portable x64 Windows programma dat een editor, assembler, disassembler, emulator, single step debugger, intel hex lees/schrijf functie een terminal window, een MPF-1 compatible zeven segment display met 8 leds en toetsenbord ondersteuning heeft.

Installatie

Download het zip bestand en pak het uit op de plaats waar u het wilt installeren op uw harde schijf. Maak dan een snelkoppeling naar het programma naar het bureaublad en het programma is gereed voor gebruik. Het is een zogenaamd portable programma waardoor het geen gebruik maakt van externe bronnen of libraries en geen gebruik maakt van de registry. Na het verwijderen van de directory van dit programma is het ook helemaal van uw systeem verdwenen.

Eerste gebruik

Om te oefenen staat er een example4.asm bestand in de example directory, dit kunt u laden waarna het in het edit venster in het midden zal staan. Nu kunt u dit door middel van de assemble knop omzetten in machinecode, dit zal links in het scherm verschijnen en in het virtuele geheugen van de emulator gezet gaan worden. De laatste (of eerste) .org zal ook inde program counter gezet worden en door een simpele druk op de run knop kunt u het programa uitvoeren en volgen op het scherm. Dit zal niet erg snel gaan omdat telkens bij elke instructie een scherm updatete zal gebeuren. Wanneer u het programma sneller wilt laten uitvoeren kunt u door middel van de update checkbox de update van het register blok uitschakelen. U kunt nu het programma aanpassen, opnieuw assembleren en weer uitvoeren.

Het basic2 voorbeeld is afkomstig van de site van Grant Searle, ik heb hier alleen een aangepaste BIOS achteraan gepplakt en .org 0000h om het startadres in te stellen.

Door middel van de step knop kunt u het programma instructie voor instructie uitvoeren en de uitvoer en de registers controleren. Ook kunt u het break adres invullen, de emulator zal dan bij een run commando stoppen op dit adres en de registers van dat moment tonen. Wanneer in het break veld 0000 staat zal het genegeerd worden.

U kunt de gewijzigde code weer als asm bestand opslaan maar ook als hex bestand wegschrijven zodat u de binaire code in een schakeling of ep(rom) kunt laden voor een echte Z80 schakeling. U kunt ook een Intel-Hex bestand inlezen, deze zal dan in het interne emulator geheugen geladen worden. Dit kunt u dan ook laten uitvoeren wanneer u het correcte startadres in de program counter zet. U kunt dit interne emulator geheugen ook laten disassembleren waarna er weer code in het edit scherm in het midden verschijnt. Dit kunt u dan aanpassen en door middel van asembleren weer terug schijven in het emulator geheugen.

I/O map

De emulator kent standaard een aantal I/O poorten voor invoer van het toetsenbord en uitvoer naar het terminal scherm of de zeven segment displays / leds. In example4 staat een voorbeeld van beiden.

  • In poort 1: Geeft in A register het teken van het toetsenbord terug, wanneer er geen teken is zal een 0 teken terug gegeven worrden.
  • In poort 2: Geef de status van het toetsenbord terug, 0 is geen toetsaanslag beschikbaar, ongelijk aan 0 betekent wel een toetsaanslag beschikbaar. De toets moet dan via poort 1 gelezen worden.
  • Out poort 1: Data voor terminal of zeven segment display. Wanneer Out poort 2 een 0 is zal de data naar de terminal gaan. Wanneer poort 2 ongelijk aan nul is zal de data naar het zeven segment display gaan.
  • Out poort 2: Selectie terminal (0) of zevene segment display. Wanneer een bit (0..5) hoog is zal de data naar elk zeven segment display geen waarvan het bit 1 is. Het is dus mogelijk elke display afzonderlijk maar ook meerdere tegelijk aan te spreken. Om alles uit te zetten zet u dus eerst 0xff op poort twee en dan een 0 op poort 1. Om weer terug te schakelen naar de terminal moet u daarna weer een 0 in naar poort 2 schrijven. (In tegenstelling tot de MPF-1 zal de data van de display wel permanent blijven staan.)
  • Out poort 3: Deze poort is een latch naar de acht leds waarbij elk bit een led aanstuurt.

Credits: Dank aan Jorge Giner Cordero voor het mogen gebruiken en meeleveren van zijn Z80 assembler en Lin Ke-Fong voor het mogen gebruiken van zijn Z80 emulator code.

Download

Dit is de eerste versie 1.01 die ik ter download beschikbaar stel. Dit is een zipbestand met daarin een portable x64 Windows exe programma, een example directory en een assembler directory.

Z80 workbensch editor / emulator / debugger

To be able to program for the z80 you need an assembler or compiler. I personally still like to write in Z80 assembler but I could no longer find tools for Windows 10. There were still some programs to download but most of them worked at DOS level. After some searching I decided that it was time for a new hobby project, building a complete integrated Z80 development environment. I found a pretty good assembler and good portable C code from an emulator and the rest I had somewhere in my code library. The result is Z80 workbench, a portable x64 Windows program that includes an editor, assembler, disassembler, emulator, single step debugger, Intel hex read / write function a terminal window, an MPF-1 compatible seven segment display with 8 LEDs and keyboard support.

Installation

Download the zip file and unzip it at the place where you want to install it on your hard drive. Then create a shortcut to the program to the desktop and the program is ready for use. It is a so-called portable program which means that it does not use external sources or libraries and does not use the registry. After removing the directory from this program, it has also disappeared completely from your system.

First time use

To practice there is an example4.asm file in the example directory, which you can load after which it will be in the shown in the middle edit window. Now you can convert this into machine code by means of the assemble button, this will appear on the left of the screen and be put into the virtual memory of the emulator. The last (or first) .org statement will also be put in the program counter and by simply pressing the run button you can execute the program and follow it on the screen. This will not be very fast because every instruction will perform a screen update of all registers. If you want the program to run faster, you can disable the update of the registry block by means of the update checkbox. You can now modify the program, reassemble it and run it again.

The basic2 is an example of the basic assembler file from Grant Searle, I only added a modified BIOS file at the end and an .org 0000h at the end to set the start adresss.

By means of the step button you can execute the program instruction by instruction and check the output and the registers. You can also enter the break address, the emulator will then stop at a run command at this address and display the registers of that moment. When 0000 is entered in the break field it will be ignored.

You can save the modified code as an asm file again but also save it as a hex file so that you can load the binary code in a circuit or ep(rom) for a real Z80 circuit. You can also read an Intel-Hex file, which will then be loaded into the internal emulator memory. You can also run tis code when you put the correct start address in the program counter. You can also disassemble this internal emulator memory code after which the source code will appears in the edit screen in the middle. This can then be changed and written back into the emulator memory by means of assemble button.

I/O map

The emulator has a standard number of I/O ports for input from the keyboard and output to the terminal screen or the seven segment displays / LEDs. In example4 there is an example of both.

  • In port 1: Returns the character of the keyboard in A register, when there is no sign a 0 character will be returned.
  • In port 2: Return the status of the keyboard, 0 no keystroke is available, unequal to 0 means a keystroke is available. The character must then be read on port 1.
  • Out port 1: Data for terminal or seven segment display. When Out port 2 is a 0, the data will go to the terminal. If port 2 is unequal to zero, the data will go to the seven segment display.
  • Out port 2: Selection terminal (0) or seven segment display. When a segment select bit (0..5) is 1, the display data will be send to each seven segment display that has its bit set to 1. It is therefore possible to address each display individually as well as multiple displays at the same time. To turn everything off, first set 0xff to port two and then a 0 to port 1. To switch back to the terminal, you have to write a 0 to port 2 again. (In contrast to the MPF-1, the data of the display is latched.)
  • Out port 3: This port is a latch to the eight LEDs where each bit controls an LED.

Credits: Credits go to Jorge Giner Cordero for letting me use and distribute his Z80 assembler, and Lin Ke-Fong for letting me use his portable C emulator code.

Download

This is the first version 1.01 that I make available for download. This is a zip file containing a portable x64 Windows exe program, one example directory and an assembler directory.


Download z80_workbench101.zip



Z80 links, tips and documents

Hier staat een overzicht van links, ontwerpen en documenten m.b.t. de Z80 processor.
Here is a list of sites, designs and information regarding the Z80 processor.



Reacties op het onderwerp: Z80


32 - Techniek »  -  Z80 »
2018-07-09 13:42:00
Hier kunt u reageren op de Z80 pagina en Z80-workbench.
Here you can reply to the Z80 page and Z80-workbench.
Reactie van een bezoeker van de site!
Q & A Z80 page
Er zijn nog geen reacties!


Last update: 27-06-2018
 Binnen dit thema



 Meer thema's


 Lees hier de privacyverklaring van deze site.

Disclaimer.

Hoewel de heer Hein Pragt de informatie beschikbaar op deze pagina met grote zorg samenstelt, sluit de heer Pragt alle aansprakelijkheid uit met betrekking tot de informatie die, in welke vorm dan ook, via zijn site wordt aangeboden. Het opnemen van een afbeelding of verwijzing is uitsluitend bedoeld als een mogelijke bron van informatie voor de bezoeker en mag op generlei wijze als instemming, goedkeuring of afkeuring worden uitgelegd, noch kunnen daaraan rechten worden ontleend. Op de artikelen van de heer Pragt op deze Internetsite rust auteursrecht. Overname van informatie (tekst en afbeeldingen) is uitsluitend toegestaan na voorafgaande schriftelijke toestemming van de rechthebbende. Voor vragen over copyright en het gebruik van de informatie op deze site kunt u contact opnemen met: (email: mail@heinpragt.com). Dit is mijn