Z80 dator

Berätta om dina pågående projekt.
victor_passe
Inlägg: 2436
Blev medlem: 28 januari 2007, 18:45:40
Ort: Kungsbacka

Re: Z80 dator

Inlägg av victor_passe »

Jag har funderat lite mer på grafikkortet.
Ska jag köra med en 96*64 pixel skärm eller en 40*4 HD44780 eller båda?
Den grafiska är fysiskt liten, nästan för liten.
Men HD44780 skärmen kan ju inte göra grafik.

Så ska jag köra med båda kanske?
Och nu har jag börjat leta efter någon form av låda för att bygga in allt i.
Eller så bygger jag en själv.
limpan4all
Inlägg: 8445
Blev medlem: 15 april 2006, 18:57:29
Ort: Typ Nyköping

Re: Z80 dator

Inlägg av limpan4all »

Jag gjorde en gång på 80-talet en grafikkontroller applikation på en Z80 och en 640*400 plasmadisplay 32kB EPROM och 2*32kB SRAM som fungerade som displayminne. CPU´n skrev i den ena medans den andra banken skrevs ut till displayen.
Det gick förstås att skriva i banken som displayades samtidigt men då fans det en liten risk för flimmer.
Så Z80 har en hel del kraft när den kodas rätt (hela den applikationen skrevs i assembler av en extremt duktig Z80 programmerare som har både hunnit pensionera sig och dö).

Så tag du en helgrafisk och var inte rädd att skriva grafikapplikationen, Z80 har kapacitet så det räcker gott och väl.
victor_passe
Inlägg: 2436
Blev medlem: 28 januari 2007, 18:45:40
Ort: Kungsbacka

Re: Z80 dator

Inlägg av victor_passe »

Nu har jag byggt ett grafikkort(som bara innehåller en 74hct138).
Och skrivit en bootloader.
Så när jag startar datorn tar PIC:en över och läser 32KB från ett 24LC256 och skriver det till SRAM minnet.
Jag testade och bara skriva 0x00 till alla platser och det funkar men när Z80:n startar så skriver den 0x67 till varannan plats i hela minnet.
Jag fattar ingenting...
Minnet blir liksom:
0x67, 0x00, 0x67, 0x00, 0x67, 0x00 osv hela vägen genom alla 64KB.

Någon som har någon aning?

Bild
Bild

victor_passe
Inlägg: 2436
Blev medlem: 28 januari 2007, 18:45:40
Ort: Kungsbacka

Re: Z80 dator

Inlägg av victor_passe »

Nu blir jag riktigt förvirrad, när jag belastar M1 med en led så funkar den fint.
Så fort jag tar bort lysdioden så ballar den ut totalt och skriver skit hit och dit och hoppar runt i adresser slumpmässigt.
Är CPU:n kass?
Den har ju legat i en källare några år utan ESD plast.
Användarvisningsbild
Swech
EF Sponsor
Inlägg: 4750
Blev medlem: 6 november 2006, 21:43:35
Ort: Munkedal, Sverige (Sweden)
Kontakt:

Re: Z80 dator

Inlägg av Swech »

M1?

Swech
victor_passe
Inlägg: 2436
Blev medlem: 28 januari 2007, 18:45:40
Ort: Kungsbacka

Re: Z80 dator

Inlägg av victor_passe »

En utgång som betyder att cpu:n är på mikrokod #1 eller vad man ska säga.
Den är i "fetch" fasen i en instruktion.
nifelheim
Den första
Inlägg: 2487
Blev medlem: 27 mars 2008, 22:31:16
Ort: stockholm

Re: Z80 dator

Inlägg av nifelheim »

Machine cycle one, aktiv vid inläsning av instruktionen (opcode fetch)
Och tillsammans med IOReQuest betyder det Interrupt Ack, så den som gjorde interrupt kan lägga interruptvektorn på bussen.

Skulle nog inte sätta en lysdiod där, funkar säker om den drar lite ström kolla databladet.
victor_passe
Inlägg: 2436
Blev medlem: 28 januari 2007, 18:45:40
Ort: Kungsbacka

Re: Z80 dator

Inlägg av victor_passe »

Jag har satt en pulldown på 240Ohm
Den funkar nu iaf. Men den beter sig väldigt konstigt.
Om jag kör denna kod:
JP 0

Då kan man ju tycka att en ska läsa 3 byte och hoppa till början.
Men den gör det och sedan hoppar den lite fram och sedan bak igen så den läser ända till byte nr 64.
victor_passe
Inlägg: 2436
Blev medlem: 28 januari 2007, 18:45:40
Ort: Kungsbacka

Re: Z80 dator

Inlägg av victor_passe »

Jag har letat en bra stund nu på hur man skickar ut något på databussen.

Om jag vill skicka datan 0xFF till adressen 0x1234
Hur gör jag då?
De jag har fattat är:
LD A, 0x12
OUT (0x34),A

Men vart stoppar man in vilken data man vill ha ut?
nifelheim
Den första
Inlägg: 2487
Blev medlem: 27 mars 2008, 22:31:16
Ort: stockholm

Re: Z80 dator

Inlägg av nifelheim »

Om du vill göra OUT till en adress större än 0xFF måste du ladda BC med adressen och sedan göra OUT (C),A
då läggs hela BC ut på adressbussen. (eller OUT(C),"något annat")

I ditt kod exempel kommer du att skriva 0x12 till port 0x34 , normala IO adresser är 0x00 till 0xFF



edit: du menade väl IO? blev osäker när jag läste din fråga igen.
victor_passe
Inlägg: 2436
Blev medlem: 28 januari 2007, 18:45:40
Ort: Kungsbacka

Re: Z80 dator

Inlägg av victor_passe »

Jo, jag menar IO.
Så om jag kör denna kod:
LD BC 0x1234
OUT 0xFF,BC så ska 0xFF komma ut på adress nr 0x1234?
nifelheim
Den första
Inlägg: 2487
Blev medlem: 27 mars 2008, 22:31:16
Ort: stockholm

Re: Z80 dator

Inlägg av nifelheim »

den OUT instruktionen finns inte, men om den funnits hade det gått bra :-)

LD A,0xFF
LD BC,0x1234
OUT (C),A

detta ger FF på data bussen och 1234 på adressbussen, IORQ och några extra wait-states ...
Tekko
Inlägg: 9009
Blev medlem: 28 november 2004, 20:19:15

Re: Z80 dator

Inlägg av Tekko »

FY FAN att du årkar :shock: :shock: :eek2: :eek2:
nifelheim
Den första
Inlägg: 2487
Blev medlem: 27 mars 2008, 22:31:16
Ort: stockholm

Re: Z80 dator

Inlägg av nifelheim »

sätt första instruktionen till halt (HLT) och kolla om den stannar.
Du har väl en lysdiod på halt - pinnen :wink:
funkar inte det ska du nog kolla kopplingen, dra ut CPU'n och sätt spänning på linorna i
data och adressbussen en och en och kolla lysdioderna.

hittade inget schema i tråden
vad har du gjort med NMI ?
victor_passe
Inlägg: 2436
Blev medlem: 28 januari 2007, 18:45:40
Ort: Kungsbacka

Re: Z80 dator

Inlägg av victor_passe »

Båda INT pinnarna har varsin pullup på 10K och driver varsin LED via en ULN2003.
Och jag ska testa och se om den haltar, bra ide!
Och tack för all din hjälp!

Edit:
Om jag kör denna kod: 0x00, 0x76 Alltså HALT så göt den detta:
Läser addr 0 (0x00)
Läser addr 1 (0x76)
lägger ut 2 på adressbussen och aktiverar MEMREQ men inte RD eller WR
lägger ut 1 på adressbussen och läser (0x76)
lägger ut 3 på adressbussen och aktiverar MEMREQ men inte RD eller WR
lägger ut 1 på adressbussen och läser (0x76)
lägger ut 4 på adressbussen och aktiverar MEMREQ men inte RD eller WR
lägger ut 1 på adressbussen och läser (0x76)
lägger ut 5 på adressbussen och aktiverar MEMREQ men inte RD eller WR
lägger ut 1 på adressbussen och läser (0x76)
lägger ut 6 på adressbussen och aktiverar MEMREQ men inte RD eller WR
lägger ut 1 på adressbussen och läser (0x76)
lägger ut 7 på adressbussen och aktiverar MEMREQ men inte RD eller WR
lägger ut 1 på adressbussen och läser (0x76)

osv ända till addr 128, där börjar den om igen från addr 1

Jag ska mäta lite med oscilloscopet och se om jag ser något konstigt.

Edit2:
Klockpinnen har en fin fyrkantsvåg i 1MHz och M1 pinnen ger fina pulser på 4µS cykeltid(50% duty).
Skriv svar