ROM moduly pre PMD-85/1, C2717, Didaktik Alfa



v roku 2024 som sa rozhodol dokončiť po vyše 10 rokoch vývoj ROM modulu pre C2717. Normálne objednať plošný spoj, nové súčiastky. Zopár som ich predal aj cez aukro, ale poviem že vyberá neprehľadné poplatiky min. 7%, ale reálne je to 10%. Vo výpise aukra je to guláš, raz je Poplatek za úspěšný prodej, Automatická úhrada poplatku za úspěný prodej, veľavravné Ostatní poplatky, Korekce DPH, a raz mesačne príde faktúra s jedným riadkom Služby portálu aukro.cz - v hodnote tak dvoch ROM modulov. To je úplne frustrujúce. Ponúkam ich preto aj napriamo a nastálo po vzájomnej dohode a bez prostredníka. Takisto je možný osobný odber a/alebo dokonca montáž či konzultácia (vytvorenie custom ROM modulu).
Rom moduly som vyvinul 4 kategórie:
  1. 128 KB ako priama náhrada pamäte 2716 a 2708 pre PMD-85 a kompatibilné (DIL24 rozmer)
  2. 128 KB ROM modul do ROM modulu PMD85
  3. 2048 KB pre C2717 a Didaktik Alfa1, Alfa2
  4. 4096 KB ROM modul pre PMD85 DIL24 rozmer

128 KB C2717,DA1, DA2 ROM moduly


Tieto počítače majú po 8 pätíc pre pamäť 2716. Tj. normálne 8*2 KB = 16 KB.
Pre C2717 sa dá technológiou po 128KB prísť až po kapacitu 8*128 KB = 1024 KB. To by však bolo veľmi prácne (tj. drahé)
Tu treba povedať že vyvinul som viacero variácií:
  1. C2717 rescue ROM modul. Náhrada všetkých 8 pamätí za jeden 128 KB ROM modul. Funguje na ALLRAM režime.
  2. C2717 dual ROM modul. Náhrada všetkých 8 pamätí za 2*128 KB ROM modul. Čiže 256 KB rom modul
  3. C2717 náhrada len pamäte 512 za 128KB ROM modul - má význam, ak máte ostantné EPROM plne funčné
  4. Alfa1 dual ROM modul. Náhrada všetkých 8 pamätí za 2*128 KB ROM modul. Čiže 256 KB rom modul
  5. Alfa1 náhrada len druhej ROM pamäte za 128KB ROM modul - má význam, ak máte ostantné EPROM plne funčné
  6. Alfa2 dual ROM modul. Náhrada všetkých 8 pamätí za 2*128 KB ROM modul. Čiže 256 KB rom modul
  7. Alfa2 náhrada len druhej ROM pamäte za 128KB ROM modul - má význam, ak máte ostantné EPROM plne funčné
  8. Takisto je možné len objednať akúkoľvek náhradu za pôvodnú EPROM. (bez 126 KB navyše programov)

128 KB pre PMD85 ROM modul


Tento ROM modul je jednoduhší, jednočipový. Jedna EPROM 1 KB (pre PMD85-3 2KB) sa nahrádza za 128 KB ROM modul. V ROM module, kde sídli BASIC prípadne PASCAL. Montáž je o poznanie jednoduhšia ako do Zbrojováčka. Tu stačí rozobrať zásuvný ROM modul. Len 4 skrutky. U Zbrojováčka sa musíte zaoberať demontážou tieniaceho plechu. Sám som ten plech na svojich C2717 doteraz nenamontoval. ROM modul je pre všetky verzie PMD85 (1,2,2A, 2B, 3 - podstantá vlastnosť)

Pre PMD85 je možné teoreticky touto technológiou spraviť 16*128 KB ROM = už úctihodných 2048 KB. Kto by to robil.

512 KB pre PMD85 -verzia 1,2,2A


Je možné pre staré PMD urobiť náhradu pôvodného monitoru PMD, tj. 4x1 KB za 4x128KB. V tých 512 KB bude 4 KB monitor, 10 KB basic a zvyšok programy. Týmto ROM modulom je možné zmeniť verziu PMD, z 1 na 2, z 2,2A na 1.

2048 KB pre C2717 a kompatibilné


Je vyrobený použitím THT DIL súčiastok. Je preto elegatný a je použitá najväčšia 8 bitová EPROM 27C160. Ako generátor a prepínač adresy pre túto pamäť je použitý ATMEGA4809. Naprogramovať tú EPROM je naozaj časovo náročné, preto je ten ROM modul aj drahší. Varianty:
  1. C2717
  2. Didaktik Alfa 1
  3. Didaktik Alfa 2
Pre Didaktiky som zistil že priamo modul z C2717 mechanicky nepasuje - Didaktik Alfa má EPROM menej husto (vo výrobe plošný spoj s úpravou rozmerov pre DA). Taktiež inžinieri pri Didaktik Alfa zaujímavo dekóduju cez obvod IC49 (74LS405 ala MH3205). Adresné linky sa dekódujú v poradí A12, A11, A13. Normálny človek by dekóder zapojil tak, aby dekódovali sa v poradí A13, A12, A11. To potom spôsuje, že EPROM sú na doske poprehazdované 0, 4, 1, 5, 2, 6, 3, 7.

4096 KB pre PMD85


Vo vývoji.... Bude to náhrada 2708 pamäte, a bude použitá sériová FLASH pamäť (8 pinová). Tam sa už zmestí všetko SW vybavenie pre PMD85 v rozmere DIL24. Pecka.

Objednať ROM modul


PMD-85 colorAce 2024



I started work or play with new Microchip AVR devices: ATMega4809-PF in DIL40 package and AVR128DB28.

ATMega4809-PF is product of post-2016 merge of Atmel with Microchip company.

The ATMega4809-PF is a new (and the only new) single-chip AVR microprocessor in a DIL40 package. Other new processors are SMT versions, e.g., TQFP.
A quick look at the datasheets, which have added a few hundred pages, gives a glimpse of the new product from the megaAVR 0 series family. Among the main novelties, I consider 48 KB flash and 6 KB RAM, while the flash content is mirrored in the address space of 64 KB RAM due to better addressing, not only through LPM instructions. Hence, the exotic 48KB and not 64KB. The RAM size is not a power of two, for example, 8KB.
* I consider the integration of the internal 16/20MHz oscillator a big plus, meaning no external piezo crystal or capacitors are needed. We save outlets and the price of the board.
* Another big plus is doubling the speed of CBI and SBI—setting and resetting the bit of a specific port. This was an early fix for some internal AVR architecture bug; after all, changing one bit in an 8-bit register can't take as long as multiplying 8-bit numbers.
* acceleration of PUSH and ST instructions (writing to stack and writing to RAM)

* Among the main disadvantages, I consider only 33 GPIO ports, of which only 2 are 8-bit PORTA and PORTD. PORTE is 4-bit, PORTC is 6-bit, PORTF is 7-bit, and the Atmega8515 still had up to 4 8-bit ports + 3-bit PORTE. GND has taken its toll, and VDD is on several pins around EMC, AVDD, and a separate UPDI pin. With the addition of the UPDI programming interface, you need to purchase another programmer or make a jtag2updi from an Atmega328 arduino like I did. The only positive is that you connect UPDI via 3 pins; SPI ISP was up to 6 pins. So usable digital GPIOs are 8+8+6+4+7=33 bits. Two pins are the power supply. The 40-35=5 pins of the DIL package cannot be used.
How can we increase, e.g., PORTC to 8-bit? I think it can be done by mapping PC6 and PC7 bits that actually exist via CCL (custom configurable logic) to other ports/pins, for example, PF0=PC6 and PF1=PC7. So we get a full-fledged 8-bit port C. When we have 3 8-bit ports, that's good for us because even the 8080 processor had a 16-bit address and an 8-bit data bus. We'll be fine...
* The advantage of Microchip's new approach is creating a CPU line with scaled FLASH 8,16,32, 48 KB, and 28,32,40,48 pin cases. Even this already gives 16 options + different cases for SMT TQFP, MFR, QFN, and SSOP. This provides realistic dozens of combinations * If you choose an unsuitable CPU, expect 52 weeks of storage. I decided for the ATmega4809-PF, the only one in the DIL40 case. Inside is the same chip as for the TQFP 48 case; only 8 pins are not connected. It's pretty logical and beautiful. Attention—the TQFP 48 case is cheaper than the DIL40. Here, I hesitated whether to go classic (few expensive pins) or SMT (future). * The increased complexity of the ATMega4809 microcomputer is confusing. Golden ATmega. There are so many IO registers, and most of them are memory mapped - MMIO. But there is an effort to clean up. For example, when there are 6 USARTs, each is the same. They differ only in the base address. Each one then has its own 16 registers. * Assembly language programming is no longer for the masses; it's not in the manual, but we'll try.

I created an LED blinker (LED blink or flasher) as a first project to test the new mega4809 processor. Of course, it is connected to PORTE0 through a resistor. I couldn't find a sample program in the assembler anywhere for such a simple thing, so I created it.


ATmega4809 blink LED, UPDI programmer in action


AVRA   Ver. 1.4.2 pmd.asm Fri Apr 12 09:55:28 2024


         
         	; mega4809 test
         	; BLINK LED DIODE connected to PORTE0 (pin 19 on DIL40 ATMEGA4809-PF)	
         	; pure assembly language
         	; (c) wurmi 2024
                  	
         	; for program device use command: avrdude -c jtag2updi -p m4809 -P /dev/ttyUSB0 -U flash:w:pmd.hex
         	
          		.device		ATmega4809
         		
          		.def	_zero		=	r10	
                .def	_255		=	r22
         	
          		.equ	xDDRE		=	0x0480+0
          		.equ	xPORTE		=	0x0480+0x04
         		
          		.equ	DDRE		=	0x10+0
          		.equ	PORTE		=	0x10+1
          		.equ	PINE		=	0x10+2
         		
         		
         		; CPU is base 0x0030
          		.equ	CPU 	=	0x0030
          		.equ	SPL		=	CPU+0x0D
          		.equ	SPH		=	CPU+0x0D+1
         		
          		.equ	CPU_CCP =	CPU+4
         				
          		.equ	RAMEND	=	0x3FFF
         		  
          		.def	XH	= r27
                  .def	XL	= r26
                  .def	YH	= r29
                  .def	YL	= r28
                  .def	ZH	= r31
                  .def	ZL	= r30
                   
                 ; base of CLKCTRL is 0x0060
                  .equ	CLKCTRL= 0x60
                 
                  .equ 	MCLKCTRLB	=	CLKCTRL + 0x01 
         		
         		; PORTE0 is LED diode
         	
          		.cseg
C:000000 24aa      		clr		_zero
C:000001 ef6f      		ldi		_255,0xff
         		
C:000002 ef0f      		ldi		r16, low(RAMEND)               	
C:000003 e31f      		ldi		r17, high(RAMEND)               	
C:000004 bf0d      		out	   	SPL,r16
C:000005 bf1e      		out		SPH,r17				; set STACK POINTER 
         		
C:000006 ed08      		ldi		r16,0xD8			; magic unlock
C:000007 bf04      		out		CPU_CCP, r16
C:000008 92a0 0061 		sts		MCLKCTRLB, _zero	; disable prescaller /6 -> run at full 16/20 MHZ
         		
C:00000a bb60      		out		DDRE, _255			; whole PORTE to output
         
          main:		
         		
C:00000b d004      		rcall	delay	
C:00000c 9888      		cbi		PORTE,0			; output 0 to PORTE0; or set whole PORTE to zeroes: out		PORTE, _zero
         		
         		
C:00000d d002      		rcall	delay
C:00000e 9a88      		sbi		PORTE,0			; output 1 to PORTE0;  or set whole PORTE to ones: out		PORTE, _255
         		
C:00000f cffb      		rjmp	main			; forever blinking
         		
          delay:	
C:000010 e4e2      		ldi		ZL,66
          de1:
C:000011 d003      		rcall	delay_ffff			; subroutine call
C:000012 95ea      		dec		ZL
C:000013 f7e9      		brne	de1
C:000014 9508      		ret
         		
          delay_ffff:
C:000015 efaf      		ldi		XL,255
          de3:		
C:000016 efbf      		ldi		XH,255
          de2:
C:000017 95ba      		dec		XH
C:000018 f7f1      		brne	de2
C:000019 95aa      		dec		XL
C:00001a f7d9      		brne	de3
         		
C:00001b 9508      		ret
         		
         			
         		
         		
Used memory blocks:
   code      :  Start = 0x0000, End = 0x001B, Length = 0x001C (28 words), Overlap=N


Segment usage:
   Code      :        28 words (56 bytes)
   Data      :         0 bytes
   EEPROM    :         0 bytes

Assembly completed with no errors.


PMD85 - in an AVR128DA28



AVR128DA28 je podivný MCU. Je to 8bitové AVR so 128KB FLASH, 16 KB RAM, bežiace na 24 MHz. Čiže poskytuje relatívne vysoký 8bitový procesor s veľa RAM, veľa FLASH. Ak nerátame radu Xmega, tak celkom vysoké parametre. Vie byť zapúzdrený v DIL28 púzdre. Ale - toto púzdro je také núdzové, poskytuje len 22 IO portov. Púzdria sa v 32, 48, 64 napr TQFP, VQFP. TQFP 64 púzdre mám a šokovalo ma malými rozmermi 10x10 mm. Na dĺžke 10 mm je totiž 16 pinov. To bude radosť spájkovať.
Ako prvé čo som spravil bol blikač. OK, bliká. Ďalšie experimenty smerovali k pripojeniu VGA monitora, monochrómne. Tu som si tak experimentoval, obraz som vygeneroval, pekný, ale trochu sa triasol. Skúšal som to fixnúť, a to tak že interný high-freq oscilátor som skúsil tuniť (ladiť),