[abc80] PIC32_Z80

juhasz at abc.se juhasz at abc.se
Mon Jan 9 02:14:39 PST 2012


Skoj projekt!

Jag har ju gjort lite försök med ABC-emulering fast mest på "stora"
datorer... (kolla in juhasz.se/abc80/rabc80.c  - den bygger på samma Z80.c
som din nedan)
Om du vill testa nåt enkelt skulle jag föreslå att du:
- kompilerar Z80.c
- konfigurerar upp 64K ram med RdZ80/WrZ80
- dumpar in ett abc80-rom i de första 16K:na
- i LoopZ80: om tecken c från tangentbordet:
                inports[56]=(c & 0x7f) | 0x80;
		return (26 << 1); //den här hade jag mycket trubbel med
                                  // innan jag fattade hur den skulle vara
             annars returnera INT_NONE
- Kolla av i WrZ80 om videominnet adresseras och fyll din videobuffert
därifrån (eller kanske bara skriv ut på serieport till att börja med). Min
rutin finns nedan (kolumn och raduträkningen var lite trixig).

Med detta borde du komma igång och kunna skriva/köra enkla basic-satser,
och vilket enkelt PIC32 kort som helst funka tror jag... Har du kollat på
lawicel?

Lycka till!

Robert

-------------------
	if (abcmodel==80)
	{
	ram[Addr & 0xffff]=Value;
		a=Addr-ofs;
		if (a<0) return;
		if (Addr>32767) return;
		//printw("Sc out %c",Value);
		r=a >> 7;
		if ((a & 127)>39) r=r+8;
		if ((a & 127)>79) r=r+8;
		c=(a & 0x7f) % 40;
		if ((c<40) && (r<24))
			{
		//	printf("%c",bb); fflush(stdout);
			//mvprintw(r,c,"%c",bb);
			abcscreen[r][c]=bb;
		    }
		}
------------------------------
> Hej!
>
> Jag kollade lite på att emulera ABC80 i en PIC32 igen. Med PIC32 Ethernet
> Starter Kit borde man kunna ta emot kommandon och skicka grafikminnet via
> USB eller Ethernet/UDP. Med expansion board är det nog ganska lätt att
> supporta delar av ABC-bussen. Kanske mindre viktigt med VGA? Här är annars
> ett kort för SD + PS2 + Audio + monokrom VGA.
> http://www.exploringpic32.com/hw.html
> Kortet är inte så dyrt (25 USD) men innehåller heller inte mycket mer än
> kontaktdon :-) Koden för VGA-generering finns utförligt beskriven i en
> bok,
> men man måste förstås översätta ABC bildskärmsminne till pixlar.
>
>>> Jag testade att kompilera en annan Z80 emulator med MPLAB för PIC32.
>>> http://fms.komkon.org/EMUL8/
>>> Det gick inte med C30-kompilatorn som gav ett felmeddelande om
>>> begränsning i storlek i gratisversionen (trodde inte det fanns en sådan
>>> begränsning). Testade HITECH istället och det gick bättre. Med
>>> Lite-versionen blev det ca 80 instruktioner för avkodning av en Z80
>>> NOP.
>>> Aktivering av Pro-versionen (45 dagar) gav ca 35 instruktioner för en
>>> NOP. Detta räcker väl ganska bra för ABC80? Den går väl på 3MHz och NOP
>>> tar 4 klockcykler?
>>>
>
> Det funkar bra med Microchips (gcc) C32-kompilator också. Jag hade bara
> inte
> sagt åt MPLAB att använda den senast installerade versionen! Denna
> kompilator klarar NOP på 24 instruktioner om man bara definierar INLINE
> lite
> extra i Z80.h
> #define INLINEvoid  __inline__ static void __attribute__((always_inline))
> #define INLINEunsigned  __inline__ static unsigned
> __attribute__((always_inline))
>
> I Z80.c finns några funktioner
> INLINE void ... och INLINE unsigned ... tag bort mellanslag så det blir
> enligt #define.
> Sedan kompilera med alternate settings: -g -O -finline -Winline.
> Totalt 84k programminne och 6k ram.
> ---------------------------------
>
> Här är de funktioner man får skriva själv för att kunna kompilera:
>
> int Z80_IRQ = 0;
> // int Z80_IPeriod = 10000;
>
> byte Z80_In (byte Port)
> { return 0x00;
> }
>
> void Z80_Out (byte Port,byte Value)
> {
> }
>
> void Z80_WRMEM(dword A,byte V)
> {
> }
>
> unsigned Z80_RDMEM(dword A)
> { return 0x00; //NOP
>
> void Z80_Patch (Z80_Regs *Regs)
> { /*Called when ED FE occurs. Can be used
>      to emulate disk access etc. */
> }
>
> int Z80_Interrupt(void)
> {   /* This is called after IPeriod T-States
>     have been executed. It should return
>     Z80_IGNORE_INT, Z80_NMI_INT or a byte
>     identifying the device (most often 0xFF) */
>  return Z80_IGNORE_INT;
> }
>
> void Z80_Reti (void)
> { /* Called when RETI occurs               */
> }
>
> void Z80_Retn (void)
> { /* Called when RETN occurs               */
> }
> ----------------------------------
>
> Hälsn.
> Anders.J
>
>
>
> _______________________________________________
> ABC80 mailing list
> ABC80 at abc80.org
> http://www.abc80.org/mailman/listinfo/abc80
>



More information about the ABC80 mailing list