Ethernet для Timex Sinclair 2068 и пр. (Sprinternet)

Старый спектрумистский форум

Moderator: Shaos

User avatar
Shaos
Admin
Posts: 23989
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Ethernet для Timex Sinclair 2068 и пр. (SprinterNet)

Post by Shaos »

Shaos wrote:Заказал 5 платок (минимум) красного цвета у китайцев на JLCPCB - получилось всего $68 с доставкой DHL :mrgreen:
"All orders finished data preparation, ready for PCB fabrication."
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 23989
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Ethernet для Timex Sinclair 2068 и пр. (SprinterNet)

Post by Shaos »

Shaos wrote:Добавил маскирование сигнала /MEMR при обращении к SPI и визнету (включается/выключается существующим управляющим битом TX/RX) - обошёлся уже имеющимися в наличии на плате неиспользованными гейтами - надо будет заказывать новую версию платы, т.к. проводочками эти изменения напаивать на существующую плату будет немного проблематично (хотя и возможно)...
Попробовал кое-какие изменения из новой версии макетки навесить проводочками на старую версию:
ShaosCart6.jpg
но EEPROM так нормально и не заработал :cry:

при чтении регистра статуса возвращает либо все нули либо чередует 0-1-0-1

видимо в случае полной неудачи с автогенерацией клока из шины придётся EEPROM к GPIO цеплять и тупо битиками программно махать имитируя SCK и SI на выходах (/CS у меня уже подключен к регистру управления) и читая SO на входе...
You do not have the required permissions to view the files attached to this post.
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 23989
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Ethernet для Timex Sinclair 2068 и пр. (SprinterNet)

Post by Shaos »

Воткнул ПЗУ 8КБ - работает :)
ShaosCart7.jpg
Непереключаемая область #D000...#D7FF - не переключается :no:
Переключаемая область #D800...#DFFF - переключается путём записи номера банки в #DFFF :mrgreen:
В последний байт каждой 2К-страницы прописан её номер (#00,#01,#02,#03) - можно прочитать значения с адреса #DFFF обратно и убедиться что банка переключилась :rotate:
You do not have the required permissions to view the files attached to this post.
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 23989
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Ethernet для Timex Sinclair 2068 и пр. (SprinterNet)

Post by Shaos »

Shaos wrote:видимо в случае полной неудачи с автогенерацией клока из шины придётся EEPROM к GPIO цеплять и тупо битиками программно махать имитируя SCK и SI на выходах (/CS у меня уже подключен к регистру управления) и читая SO на входе...
видимо таки придётся - в этом случае по адресу SPI #C200 появятся 2 бита на запись:

бит 0 - clock
бит 7 - data out

а также 1 бит на чтение (как сейчас):

бит 0 - data in

седьмой бит т.к.в SPI данные уходят начиная от старших битов к младшим и такое расположение упростит программу записи в SPI
однако на чтение лучше начинать с бита 0 постепенно сдвигая данные влево - это также упростит программу чтения из SPI
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 23989
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Ethernet для Timex Sinclair 2068 и пр. (SprinterNet)

Post by Shaos »

как описано выше EEPROM вроде заработало - теперь надо разбираться с командами - там какая-то хитрая система разрешения-запрещения записи

возможно надо будет разнести адресные области на запись и чтение чтобы защищаться от мусорных стробов на чтение "by design", например:
#C100 - только запись в регистр управления и цифровые выходы (0-TX/RX,1-OUT1,2-OUT2,3-OUT3,4-SPI0,5-SPI1,6-SCK,7-SI)
#C200 - только чтение со SPI EEPROM, MMC и пр. (бит 0 - SO)
#C300 - только чтение с цифровых входов (IN0...IN7)
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 23989
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Ethernet для Timex Sinclair 2068 и пр. (SprinterNet)

Post by Shaos »

Shaos wrote:В последний байт каждой 2К-страницы прописан её номер (#00,#01,#02,#03) - можно прочитать значения с адреса #DFFF обратно и убедиться что банка переключилась :rotate:
Что-то наверное надо не ровно тоже самое прописывать, а скажем значение на #80 большее (т.е. #80 для нулевой страницы, #81 для первой, #82 для второй и #83 для третьей), а то можно по ошибке принять поведение ISA-шины когда ничего не воткнуто за присутствующее ПЗУ т.к. с пустой шины можно прочитать тот же байт, который туда только что был записан (экспериментально найденный эффект).
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 23989
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Ethernet для Timex Sinclair 2068 и пр. (SprinterNet)

Post by Shaos »

Shaos wrote:как описано выше EEPROM вроде заработало - теперь надо разбираться с командами - там какая-то хитрая система разрешения-запрещения записи
Разобрался я с защитой от записи у этой 25C320 - у меня она уже подключена с /WP ногой на землю, но в неё всё ещё можно записывать, пока не будет взведён один из битиков статусного регистра (а именно бит 7 WPEN), после этого часть памяти (либо всё) будет защищена от записи в зависимости от состояния двух других битиков 2 и 3 регистра статуса - BP1 и BP0 (причём будет защищено навсегда пока ногу /WP не оторвут от земли):

BP1=0 BP0=0 - защищён только регистр статуса
BP1=0 BP0=1 - старшая четверть защищена от записи (0C00h...0FFFh), а также регистр статуса
BP1=1 BP0=0 - старшая половина защищена от записи (0800h...0FFFh), а также регистр статуса
BP1=1 BP0=1 - всё защищено от записи (0000h...0FFFh), включая регистр статуса

Далее битик 1 (WEL) должен быть взведён командой WREN каждый раз когда мы хотим что-то куда-то записать (даже если речь идёт о записи в регистр статуса) и после записи этот битик опять сбросится в 0. Если какая-то область защищена от записи, то запись туда не получится. Ну и последний битик номер 0 (WIP) показывает если запись всё ещё идёт - по даташиту в худшем случае на запись может уйти до 50 мс.

Я планирую защитить от записи старший 1 килобайт, в котором я на "фабрике" прошью уникальный для пользователя MAC-адрес, а также некоторую другую информацию как например имя и адрес электронной почты человека на которого была зарегистрирована сетевая карточка, а также возожно ключи для доступа к шлюзу и контрольные суммы мака и ключей. Пользователь не сможет изменить эти данные не отпаивая микросхему памяти...
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 23989
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Ethernet для Timex Sinclair 2068 и пр. (SprinterNet)

Post by Shaos »

Shaos wrote: Я планирую защитить от записи старший 1 килобайт, в котором я на "фабрике" прошью уникальный для пользователя MAC-адрес, а также некоторую другую информацию как например имя и адрес электронной почты человека на которого была зарегистрирована сетевая карточка, а также возожно ключи для доступа к шлюзу и контрольные суммы мака и ключей. Пользователь не сможет изменить эти данные не отпаивая микросхему памяти...
Но тут получается, что любая программа (например скачанная из интернета) может эти ключи прочитать!
Наверное это надо как-то запретить - например разрешать читать из SPI только кодом, расположенным в области ПЗУ сетевой карточки.
Хотя наверное полная защита возможна только если оно спрятано от пользователя совсем, например всё шифрование и дешифровку делал бы микроконтроллер, находящийся на плате...
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 23989
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Ethernet для Timex Sinclair 2068 и пр. (SprinterNet)

Post by Shaos »

Вот текущее положение дел с первой макеткой:
ShaosCart8.jpg
Зелёные светодиоды слева-направо:
  • TX_LED (LED3)
  • RX_LED (LED2)
  • LINKLED (LED1)
P.S. Последний повторяет состояние зеленого светодиода на Ethernet-розетке так что в будущем я не буду его ставить как отдельный светодиод...
You do not have the required permissions to view the files attached to this post.
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 23989
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Ethernet для Timex Sinclair 2068 и пр. (SprinterNet)

Post by Shaos »

Пишу подпрограммки работы с SPI EEPROM - на максимальной скорости будучи запущенным из ПЗУ ISA-карточки Спринтера на скорости 14 МГц я могу посылать битики (при этом щёлкая SPI клоком) со скоростью 1 миллион битов в секунду - так можно посылать команды в "захардкоденном" виде. При чтении произвольных данных ещё придётся тратиться на собирание байта из битиков и сохранение в памяти со сдвигом указателя. Написал подпрограммки разрешения записи (19мкс на 14 МГц), запрещения записи (14мкс на 14 МГц) и чтения регистра статуса (41мкс на 14 МГц или примерно 58мкс на 10 МГц), чтобы проверить что запись завершена. Пока проверяю запись в регистр статуса (отдельной подпрограммки для записи в регистр статуса не будет, т.к. пользователю нет необходимости писать в регистр статуса - пользоваться записью в регистр статуса буду я, когда буду включать режим защиты от записи после прошивки MAC-адреса) и получается, что после записи в регистр статуса мне нужно вызывать подпрограмму проверки 37 раз пока бит занятости не сбросится (сейчас я запускаю тест-программку из системной памяти, которая крутится примерно на 10 МГц) - это около 2мс. Теперь буду писать подпрограммки чтения-записи байтов и буду мерять время записи там (по документации запись страницы данных может занять до 50мс, а одна страница это 32 байта).
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 23989
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Ethernet для Timex Sinclair 2068 и пр. (SprinterNet)

Post by Shaos »

Написал подпрограмму засылки команды записи со стартовым адресом занимающую 88мкс на 14МГц и отдельную подпрограмму записи одного байта - 35мкс на 14МГц (которая также использовалась 2 раза для засылки адреса в первой подпрограмме). На передачу всех 32 байт одной страницы EEPROM уйдёт 88+35*32=1.2мс плюс ожидание окончания записи - до 50мс.

P.S. Чтение тоже дописал - подпрограмма засылки команды чтения со стартовым адресом также занимает 88мкс на 14МГц, а вот отдельная подпрограмма чтения одного байта потянула на 51мкс (для 14МГц), что означает чтение со скоростью 19 килобайт в секунду.

P.P.S. Развернул цикл чтения - получилось на прочитать 1 байт тоже 34мкс (для 14МГц) как и на запись, т.е. теперь скорость потокового чтения стала 29 килобайт в секунду!

P.P.P.S. Под спойлером исходники подпрограмм работы с EEPROM 25C320 и ещё более ускоренным чтением - 25.3мкс или 38 килобайт в секунду (кстати написанные полностью на Спринтере в FN и TASM - в целом оно должно быть совместимо с 8080 т.к. я никакой z80-экзотики не использовал):

 SPI-ASM

Code: Select all

SN_WIZN EQU     0C000h
SN_CTRL EQU     0C100h
SN_SPI  EQU     0C200h
SN_GPIO EQU     0C300h
SN_WIZ1 EQU     0C400h
SN_WIZ2 EQU     0C500h
SN_WIZ3 EQU     0C600h
SN_WIZ4 EQU     0C700h
SN_RAM  EQU     0C800h
SN_ROM0 EQU     0D000h
SN_ROMN EQU     0D800h
SN_WIZB EQU     0E000h

SPIOFF  EQU     0
SPIONW  EQU     2
SPIONR  EQU     3
WIZTX   EQU     0
WIZRX   EQU     1

STORE_WPEN DB 0
STORE_BP1  DB 0
STORE_BP0  DB 0

; Prepare constants for other subroutines (internal)
; 17+55=72 with CALL

SPI_SETN:
                ld      b,0             ; 7/7
                ld      c,1             ; 7/14
                ld      d,128           ; 7/21
                ld      e,129           ; 7/28
                ld      hl,SN_GPIO      ; 10/38 <<< TEMPORARY
                ld      (hl),b          ; 7/45
                ret                     ; 10/55

; Send A to SPI (saved HL, used BC)
; 17+472=489 with CALL (34.9us on 14MHz)

SPI_WRITE_BYTE: push    hl              ; 11/11
                ld      b,a             ; 4/15
                ld      c,8             ; 7/22
                ld      hl,SN_GPIO      ; 10/32 <<< TEMPORARY
SPI_WRITE_L1:                           ; LOOP 8*51=408/440
                and     128             ; LOOP 7/7
                ld      (hl),a          ; LOOP 7/14
                inc     a               ; LOOP 4/18
                ld      (hl),a          ; LOOP 7/25
                ld      a,b             ; LOOP 4/29
                rlca                    ; LOOP 4/33
                ld      b,a             ; LOOP 4/37
                dec     c               ; LOOP 4/41
                jp      nz,SPI_WRITE_L1 ; LOOP 10/51
                xor     a               ; 4/445
                ld      (hl),a          ; 7/452
                pop     hl              ; 10/462
                ret                     ; 10/472


; Receive A from SPI (saved HL, used BC and DE)
; 17+337=354 with CALL (25.3us on 14MHz)

SPI_READ_BYTE:  push    hl              ; 11/11
                ld      b,0             ; 7/18
                ld      c,1             ; 7/25
                ld      hl,SN_GPIO      ; 10/35 <<< TEMPORARY
                ld      de,SN_SPI       ; 10/45
                ld      (hl),c          ; 7/52 === bit 0
                ld      a,(de)          ; 7/59
                and     c               ; 4/63
                or      b               ; 4/67
                rlca                    ; 4/71
                ld      b,a             ; 4/75
                ld      (hl),0          ; 10/85
                ld      (hl),c          ; 7/92 === bit 1
                ld      a,(de)          ; 7/99
                and     c               ; 4/103
                or      b               ; 4/107
                rlca                    ; 4/111
                ld      b,a             ; 4/115
                ld      (hl),0          ; 10/125
                ld      (hl),c          ; 7/132 === bit 2
                ld      a,(de)          ; 7/139
                and     c               ; 4/143
                or      b               ; 4/147
                rlca                    ; 4/151
                ld      b,a             ; 4/155
                ld      (hl),0          ; 10/165
                ld      (hl),c          ; 7/172 === bit 3
                ld      a,(de)          ; 7/179
                and     c               ; 4/183
                or      b               ; 4/187
                rlca                    ; 4/191
                ld      b,a             ; 4/195
                ld      (hl),0          ; 10/205
                ld      (hl),c          ; 7/212 === bit 4
                ld      a,(de)          ; 7/219
                and     c               ; 4/223
                or      b               ; 4/227
                rlca                    ; 4/231
                ld      b,a             ; 4/235
                ld      (hl),0          ; 10/245
                ld      (hl),c          ; 7/252 === bit 5
                ld      a,(de)          ; 7/259
                and     c               ; 4/263
                or      b               ; 4/267
                rlca                    ; 4/271
                ld      b,a             ; 4/275
                ld      (hl),0          ; 10/285
                ld      (hl),c          ; 7/292 === bit 6
                ld      a,(de)          ; 7/299
                and     c               ; 4/303
                or      b               ; 4/307
                rlca                    ; 4/311
                ld      b,a             ; 4/315
                ld      (hl),0          ; 10/325
                ld      (hl),c          ; 7/332 === bit 7
                ld      a,(de)          ; 7/339
                and     c               ; 4/343
                or      b               ; 4/347 <<< A is ready
                ld      (hl),0          ; 10/357
                pop     hl              ; 10/367
                ret                     ; 10/377


; Remove all CS signals from all SPI devices
; 17+27=44 (3.1us for 14MHz) with CALL

SPI_END:        xor     a               ; 4/4
                ld      (SN_CTRL),a     ; 13/17
                ret                     ; 10/27

; WREN - Set the write enable latch
; 17+255=272 with CALL (19.4us on 14MHz)

SPI_WREN:
                call    SPI_SETN        ; 72/72
                ld      a,SPIONW        ; 7/79
                ld      (SN_CTRL),a     ; 13/92
                nop                     ; 4/96
                nop                     ; 4/100
                ld      (hl),b          ; 7/107
                ld      (hl),c          ; 7/114
                ld      (hl),b          ; 7/121
                ld      (hl),c          ; 7/128
                ld      (hl),b          ; 7/135
                ld      (hl),c          ; 7/142
                ld      (hl),b          ; 7/149
                ld      (hl),c          ; 7/156
                ld      (hl),b          ; 7/163
                ld      (hl),c          ; 7/170
                ld      (hl),d  ; 1     ; 7/177
                ld      (hl),e          ; 7/184
                ld      (hl),d  ; 1     ; 7/191
                ld      (hl),e          ; 7/198
                ld      (hl),b          ; 7/205
                ld      (hl),c          ; 7/212
                ld      (hl),b          ; 7/225
                ld      a,SPIOFF        ; 7/232
                ld      (SN_CTRL),a     ; 13/245
                ret                     ; 10/255

; WRDI - Reset the write enable latch
; 17+255=272 with CALL (19.4us on 14MHz)

SPI_WRDI:
                call    SPI_SETN        ; 72/72
                ld      a,SPIONW        ; 7/79
                ld      (SN_CTRL),a     ; 13/92
                nop                     ; 4/96
                nop                     ; 4/100
                ld      (hl),b          ; 7/107
                ld      (hl),c          ; 7/114
                ld      (hl),b          ; 7/121
                ld      (hl),c          ; 7/128
                ld      (hl),b          ; 7/135
                ld      (hl),c          ; 7/142
                ld      (hl),b          ; 7/149
                ld      (hl),c          ; 7/156
                ld      (hl),b          ; 7/163
                ld      (hl),c          ; 7/170
                ld      (hl),d  ; 1     ; 7/177
                ld      (hl),e          ; 7/184
                ld      (hl),b          ; 7/191
                ld      (hl),c          ; 7/198
                ld      (hl),b          ; 7/205
                ld      (hl),c          ; 7/212
                ld      (hl),b          ; 7/225
                ld      a,SPIOFF        ; 7/232
                ld      (SN_CTRL),a     ; 13/245
                ret                     ; 10/255

; RDSR - Read Status Register
; flagC is WEL, flagZ is WIP
; 17+557=574 with CALL (41us on 14MHz)

SPI_RDSR:
                call    SPI_SETN        ; 72/72
                ld      a,SPIONW        ; 7/79
                ld      (SN_CTRL),a     ; 13/92
                nop                     ; 4/96
                nop                     ; 4/100
                ld      (hl),b          ; 7/107
                ld      (hl),c          ; 7/114
                ld      (hl),b          ; 7/121
                ld      (hl),c          ; 7/128
                ld      (hl),b          ; 7/135
                ld      (hl),c          ; 7/142
                ld      (hl),b          ; 7/149
                ld      (hl),c          ; 7/156
                ld      (hl),b          ; 7/163
                ld      (hl),c          ; 7/170
                ld      (hl),d ; 1      ; 7/177
                ld      (hl),e          ; 7/184
                ld      (hl),b          ; 7/191
                ld      (hl),c          ; 7/198
                ld      (hl),d ; 1      ; 7/205
                ld      (hl),e          ; 7/212
                ld      (hl),b          ; 7/225
                ld      a,SPIONR        ; 7/232
                ld      (SN_CTRL),a     ; 13/245
                ld      de,SN_SPI       ; 10/255
                ld      (hl),c          ; 7/262
                ld      a,(de)          ; 7/269
                ld      (hl),b          ; 7/276
                and     c               ; 4/280
                ld      (STORE_WPEN),a  ; 13/293
                ld      (hl),c          ; 7/300
                ld      a,(de)          ; 7/307
                ld      (hl),b          ; 7/314
                ld      (hl),c          ; 7/321
                ld      a,(de)          ; 7/328
                ld      (hl),b          ; 7/335
                ld      (hl),c          ; 7/342
                ld      a,(de)          ; 7/349
                ld      (hl),b          ; 7/356
                ld      (hl),c          ; 7/363
                ld      a,(de)          ; 7/370
                ld      (hl),b          ; 7/377
                and     c               ; 4/381
                ld      (STORE_BP1),a   ; 13/394
                ld      (hl),c          ; 7/401
                ld      a,(de)          ; 7/408
                ld      (hl),b          ; 7/415
                and     c               ; 4/419
                ld      (STORE_BP0),a   ; 13/432
                ld      (hl),c          ; 7/439
                ld      a,(de)          ; 7/446
                ld      (hl),b          ; 7/453
                push    af              ; 11/464
                ld      (hl),c          ; 7/471
                ld      a,(de)          ; 7/478
                ld      (hl),b          ; 7/485
                and     c               ; 4/489
                ld      b,a             ; 4/493
                ld      a,SPIOFF        ; 7/500
                ld      (SN_CTRL),a     ; 13/513
                pop     af              ; 10/523
                and     c               ; 4/527
                ld      c,a             ; 4/531
                ld      a,b             ; 4/535
                or      a ;flagZ is WIP ; 4/539
                ld      a,c             ; 4/543
                rrca      ;flagC is WEL ; 4/547
                ret                     ; 10/557

; WRITE - Initiate write sequence starting with address HL
; 17+1212=1229 with CALL (88us on 14MHz)

SPI_WRITE_START:
                push    hl              ; 11/11
                call    SPI_SETN        ; 72/83
                ld      a,SPIONW        ; 7/90
                ld      (SN_CTRL),a     ; 13/103
                nop                     ; 4/107
                nop                     ; 4/111
                ld      (hl),b          ; 7/118
                ld      (hl),c          ; 7/125
                ld      (hl),b          ; 7/132
                ld      (hl),c          ; 7/139
                ld      (hl),b          ; 7/146
                ld      (hl),c          ; 7/153
                ld      (hl),b          ; 7/160
                ld      (hl),c          ; 7/167
                ld      (hl),b          ; 7/174
                ld      (hl),c          ; 7/181
                ld      (hl),b          ; 7/188
                ld      (hl),c          ; 7/195
                ld      (hl),d  ; 1     ; 7/202
                ld      (hl),e          ; 7/209
                ld      (hl),b          ; 7/216
                ld      (hl),c          ; 7/223
                ld      (hl),b          ; 7/230
                pop     hl              ; 10/240
                ld      a,h             ; 4/244
                call    SPI_WRITE_BYTE  ; 477/721 (it saves HL)
                ld      a,l             ; 4/725
                call    SPI_WRITE_BYTE  ; 477/1202 (it saves HL)
                ret                     ; 10/1212

; READ - Initiate read sequence starting with address HL
; 17+1232=1249 with CALL (89us with 14MHz)

SPI_READ_START:
                push    hl              ; 11/11
                call    SPI_SETN        ; 72/83
                ld      a,SPIONW        ; 7/90
                ld      (SN_CTRL),a     ; 13/103
                nop                     ; 4/107
                nop                     ; 4/111
                ld      (hl),b          ; 7/118
                ld      (hl),c          ; 7/125
                ld      (hl),b          ; 7/132
                ld      (hl),c          ; 7/139
                ld      (hl),b          ; 7/146
                ld      (hl),c          ; 7/153
                ld      (hl),b          ; 7/160
                ld      (hl),c          ; 7/167
                ld      (hl),b          ; 7/174
                ld      (hl),c          ; 7/181
                ld      (hl),b          ; 7/188
                ld      (hl),c          ; 7/195
                ld      (hl),d  ; 1     ; 7/202
                ld      (hl),e          ; 7/209
                ld      (hl),d  ; 1     ; 7/216
                ld      (hl),e          ; 7/223
                ld      (hl),b          ; 7/230
                pop     hl              ; 10/240
                ld      a,h             ; 4/244
                call    SPI_WRITE_BYTE  ; 477/721 (it saves HL)
                ld      a,l             ; 4/725
                call    SPI_WRITE_BYTE  ; 477/1202 (it saves HL)
                ld      a,SPIONR        ; 7/1209
                ld      (SN_CTRL),a     ; 13/1222
                ret                     ; 10/1232

Запись трёх байтов в EEPROM например будет выглядеть так:

Code: Select all

                call    SPI_WREN ; разрешить запись

                ld      hl,0
                call    SPI_WRITE_START ; начать процедуру записи (послать код команды и адрес)
                ld      a,0AAh
                call    SPI_WRITE_BYTE ; послать первый байт
                ld      a,055h
                call    SPI_WRITE_BYTE ; послать второй байт
                ld      a,0
                call    SPI_WRITE_BYTE ; послать третий байт
                call    SPI_END ; закончить процедуру записи (снять /CS с EEPROM)

; теперь надо ждать пока запись внутри микросхемы не закончится - для этого берём слово состояния

                call    SPI_RDSR ; прочитать слово состояния
                jp      nc,WAITERR2 ; если флаг C не установлен, то запись не идёт - скорее всего мы забыли её разрешить командой WREN
                ld      bc,1 ; счётчик сколько раз спросили слово состояния, чтобы оценить как долго писалось
WAITFORIT2:
                inc     bc
                ld      a,b
                cp      8 ; больше двух тысяч циклов прошло, а флаг не сбросился 
                jp      z,WAITERR2 ; уходим по ошибке вместо зависона (маловероятно, но пусть будет)
                push    bc
                call    SPI_RDSR ; прочитать слово состояния
                pop     bc
                jp      nz,WAITFORIT2 ; если флаг Z всё ещё не ноль то повторяем процедуру проверки слова состояния

; если дошли до сюда, то значит запись закончилась (обычно 37 циклов если запускать из основной памяти, что составляет примерно 2мс)
     
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 23989
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Ethernet для Timex Sinclair 2068 и пр. (SprinterNet)

Post by Shaos »

Shaos wrote:
Shaos wrote:Заказал 5 платок (минимум) красного цвета у китайцев на JLCPCB - получилось всего $68 с доставкой DHL :mrgreen:
"All orders finished data preparation, ready for PCB fabrication."
Всё - сделали. Теперь курьер DHL должен забрать и отправить в штаты...

P.S. Забрал курьер - доставят в пятницу:
Estimated Delivery:
Friday, January 22, 2021
By End of Day
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 23989
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Ethernet для Timex Sinclair 2068 и пр. (SprinterNet)

Post by Shaos »

А между тем посылка уже в Сан-Хосэ - пишут уже сегодня доставят :rotate:
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 23989
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Ethernet для Timex Sinclair 2068 и пр. (SprinterNet)

Post by Shaos »

Shaos wrote:А между тем посылка уже в Сан-Хосэ - пишут уже сегодня доставят :rotate:
Доставили :)
You do not have the required permissions to view the files attached to this post.
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 23989
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Ethernet для Timex Sinclair 2068 и пр. (SprinterNet)

Post by Shaos »

Собираю:
You do not have the required permissions to view the files attached to this post.
Я тут за главного - если что шлите мыло на me собака shaos точка net