| Indeks | English version |
Niezbyt szczegółowy opis końcówki NUM zacytowany z dokumentacji:
To wyprowadzenie nie jest przeznaczone do wykorzystania przez użytkownika. W przypadku układu HD6305Y1 (posiadającego wewnętrzną pamięć ROM) powinno być podłączone do Vcc przez opornik 10 kΩ. W przypadku układu HD6305Y2 (bez wewnętrznej pamięci ROM) powinno być podłączone do Vss.
Okazało się, że mikroprocesor HD6305Y1 z końcówką NUM połączoną z Vss zachowuje się tak samo jak HD6305Y2, tzn. zaczyna wykonywać kod z zewnętrznej pamięci zamiast z wewnętrznej. Niestety program nie uzyska dostępu do wewnętrznej pamięci ROM przez zmianę stanu końcówki NUM (ponieważ jest on odczytywany tylko przy resecie a potem ignorowany), ale odczyt nieudokumentowanego rejestru pod adresem $001F lub zapis czegokolwiek do niego również przynosi pożądany efekt.
Jedyna dotychczas znaleziona informacja na temat rejestru $001F:
Nie wolno używać obszaru $13 do $1F, ponieważ jest on przeznaczony do testowania układu. Zapis lub odczyt tych adresów powoduje katastrofę.

Program zapisany w pamięci EPROM przesyła zawartość wewnętrznej pamięci ROM (zakres adresów $0140 do $1FFF) przez port szeregowy. Fragmenty kodu, które zawierają w komentarzu liczbę taktów, muszą być wykonane w ściśle określonym czasie. Trzeba zwrócić na to uwagę przy ewentualnej modyfikacji.
Ustawienia portu szeregowego:
portc equ $02
ddrc equ $06
ram equ $40 ;adres początku pamięci RAM
; bity portu C
TXD equ 0 ;wyjście szeregowe, nie zmieniać!
org $1F00
reset: sei
rsp
; kopiowanie programu do pamięci RAM oraz wykonanie go
clrx
loop1: lda progr,x
sta ram,x
incx
bpl loop1 ;kopiowane jest 128 bajtów
jmp ram
; kod kopiowany do RAM
progr: lda #$01 ;1<<TXD
sta ddrc ;TXD = wyjście
sta portc ;TXD = stan wysoki
; opóźnienie ok. 500 ms
clrx
loop2: deca
bne loop2
decx
bne loop2
; przełączenie trybu pracy procesora
clr $1F
; pętla wysyłająca bajty
loop4: bclr TXD,portc ;bit startu
ldacmd: lda $0140 ;4 takty, argument modyfikowany
sec ;1 takt, bit stopu
; pętla wysyłająca bity
; wymagana długość pętli = 2.4576MHz / 4 / 9600Hz = 64 takty
loop5: ldx #10 ;2 takty
loop6: dex ;2 takty
bne loop6 ;3 takty
rora ;2 takty
rol portc ;5 taktów, Carry idzie na TXD
cmp #0 ;2 takty, kasuje Carry
bne loop5 ;3 takty, następny bit
; bity stopu, ilość taktów niekrytyczna, ale co najmniej 59 stąd do loop4
ldx #30
loop7: dex
bne loop7
; następny adres
inc ldacmd+2+ram-progr
bne loop4
inc ldacmd+1+ram-progr
brclr 5,ldacmd+1+ram-progr,loop4
; koniec
bra *
; wektor RESET
org $1FFE
db high reset, low reset