Inhoudsopgave:
2025 Auteur: John Day | [email protected]. Laatst gewijzigd: 2025-01-13 06:57
Dit is een voorbeeld van een gebruikers-LED-programma geschreven in Z80 assembler voor de z80-mbc2-computer.
Ik deed dit een test- en revisieoefening voor mij, dit is mijn eerste Z80-programma in meer dan 35 jaar.
Genieten van
Benodigdheden
Z80-mbc2-computer
Een kopie van Z80ASM van SLR Systems Rel. 1.32, te downloaden uit vele cp/m-archieven
Een editor, ik gebruikte ZDE16, omdat het al op de CP/M-opstartimage stond voor de z80-mbc2
Stap 1: Installeer Z80asm op uw Z80-mbc2
Ik neem aan dat je bekend bent met de tools die je hebt voor je Z80-MBC2, namelijk welke versie van cpmtools je ook gebruikt. Dit zijn de stappen bij het gebruik van de opdrachtregelversies:
- Haal de bestanden z80asm.com en z80asm.doc (optioneel) in een map ergens op uw host-pc
- Plaats uw SD-kaart in dezelfde pc, ik neem aan dat deze wordt weergegeven als station E: hieronder.
- Ik heb de assembler op mijn CP/M schijf A gezet, voor cp/m 2.2 zou dat schijfkopie DS0N00. DSK zijn
- De opdracht: cpmcp -f z80mbc2-d0 e:DS0N00. DSK z80asm.com 0: kopieert het bestand z80asm.com naar de afbeelding
- Het commando cpmcp -f z80mbc2-d0 e:DS0N00. DSK z80asm.doc 0: kopieert de documentatie naar de schijf (optioneel)
Wanneer u cp/m 2.2 opstart op uw z80-mbc, zou u nu z80asm.com en z80asm.doc (optioneel) op station A moeten hebben
Stap 2: Kopieer de broncode naar u Z80-mbc2
Maak verbinding met de z80-mbc met uw terminalprogramma
Ik raad je aan een niet-bevolkte schijf te gebruiken om de broncode op te slaan, bijvoorbeeld f: om dit schijftype te kiezen:
F:
na een paar seconden ziet u de F: prompt.
gebruik nu het programma zde16 op station A om een leeg bestand te bewerken:
a:zde16 myled.z80
Dit zal een bestand maken met de naam myled.z80 op de schijf F:, let op: de.z80 is vereist in de naam om z80asm te laten werken.
Kopieer en plak nu de onderstaande code, afhankelijk van uw terminalsnelheid enz. moet u mogelijk in kleine secties kopiëren en plakken. Of typ het in! krijg ook dat jaren 80-gevoel terug.
;
;Test de gebruikers-LED en gebruikerssleutel; BDOS equ 05h;cp/m BDOS ingangspunt USRLED equ 0;opcode voor gebruikers-LED-bediening USRKEY equ 80h;opcode voor gebruikersschakelaar-bediening DPORT equ 0;DATA-poort i/o CPORT equ 1;Command-poortuitgang; org 0100h; ld (estack), sp;bewaar bestaande info om terug te keren naar cp/m ld sp, stack; ld hl, msg;hallo berichtoproep _puts lp: ld a, 1;aanzetten = 1 oproep led oproepvertraging;vertraging en wachten op toets(en) jr nz, klaar;niet nul betekent toets/schakelaar ingedrukt xor a;a= 0 oproep led oproepvertraging;vertraging of wacht op toets/schakelaar jr z, lp;indien nul, geen toets/schakelaar, ga opnieuw; finish: xof een;toets of schakelaar is ingedrukt, dus klaar bel led ld hl, doei;say bye call _puts;display bericht HL= ld sp, (estack);originele stapel ret;terug naar cp/m; led: push af;save led-waarde 0 of 1 ld a, USRLED out (CPORT), a;optcode verzonden pop af out (DPORT), a;data verzonden ret;;Vertraging lus die controletoets indrukt op terminal of gebruikerstoets vertraging: ld bc, 00e00h;ongeveer 1/2s 8mhz CPU, puur giswerk loop2: dec bc;tel de lus push bc;bewaar regs bij het aanroepen van BDOS push de ld c, 6;BDOS raw i/o controleer of toets ingedrukt is ld e, 0ffh bel BDOS pop de;haal onze waarden terug van stack pop bc of a;controleer of toets ingedrukt is op terminal ret nz;yes return (houdt ook nz vlag in) ld a, USRKEY;Controleer nu gebruikerssleutel uit (CPORT), a;opdrachtpoort in a, (DPORT);lees sleutel en a, 1;alleen geïnteresseerd in bit 0 ret nz;retour als gebruikerstoets ld a, b indrukt;of is bc=0 of c jr nz, loop2;niet klaar met tellen, ga opnieuw xof a;zet de z-vlag op 0 ret;retour geen toets ingedrukt, einde van vertraging; _puts: push bc;save onze regs klaar voor bdos-oproepen push de nxt: ld a, (hl);get char of a;test if it's 0, end of msg jr z, done;yes so done ld e, a; aanroep naar BDOS instellen om een char ld c af te drukken, 2 push hl;save text pointer call BDOS;print it pop hl inc hl;next char jr nxt;ga verder gedaan: pop de;complete restore regs pop bc ret;and return; msg db 'User LED test, any key to exit' db 0ah, 0dh, 0 bye db 'Exit' db 0ah, 0dh, 0 estack dw 0 ds 256 - 2 stack: dw 0
Sla het bestand op met ESC x. Zie de ZDE16-gebruiksgids voor meer informatie, het lijkt een beetje op wordstar voor de meeste bewerkingen, behalve dat de Ctrl-K-opties anders zijn.
Stap 3: Compileer en voer het programma uit
Zodra u uw broncode op de machine hebt.
Type:
F>
F>a:z80asm myled/a Z80ASM Copyright (C) 1983-86 door SLR Systems Rel. 1.32 MYLED/A Einde bestand Pass 1 0 Fout(en) gedetecteerd. 406 absolute bytes. 16 symbolen gedetecteerd.
Dit zal naar het bestand myled.z80 zoeken en een binair (.com) bestand produceren, dat is waar de optie /a voor staat.
Zie het bestand z80asm.doc voor meer informatie.
Om het programma uit te voeren, typt u:
F>myled
Gebruikers-LED-test, elke toets om af te sluiten Afsluiten F>
Druk op de gebruikersknop of op een toets op de terminal om af te sluiten.
Gedaan.