nedoPC.org

Electronics hobbyists community established in 2002
Atom Feed | View unanswered posts | View active topics It is currently 26 Apr 2024 23:58



Reply to topic  [ 265 posts ]  Go to page Previous  1 ... 12, 13, 14, 15, 16, 17, 18  Next
Радио-86РК на SRAM 128K Alpha (2014) & Beta (2024) 
Author Message
Senior
User avatar

Joined: 17 Jun 2014 04:29
Posts: 138
Location: 93.80.157.217
Reply with quote
всё ж таки интересует скорость на 8080, т.к. в нём нет хитросделанных команд, да и скорость РК так себе (особенно на 1,77)
плюс, мне ещё пришлось решать задачу -- как сделать распаковщик без использования ОЗУ (без команд PUSH/POP, CALL/RET), т.к. мой распаковщик находится в теневом ПЗУ и память ему недоступна.

_________________
https://radio-86rk.ru
кто я такой, чтобы спорить с самим собой


27 Jan 2024 22:52
Profile WWW
Online
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22596
Location: Silicon Valley
Reply with quote
Пишу депакер для 8080 на основе перемещаемого z80-кода - пока получается 48 тактов на один байт непакованных данных (на 1 такт быстрее чем z80):
Code:
; HL - address of packed data (data starts with a key byte)
; DE - pointer to the buffer where depacked data should appear (16KB max)

DESHAFF0:
        mov     b,m     ; B is a Key byte (#FF in normal case)
        inx     h
DSH0L:  mov     a,m     ; +7=7  ; main loop
        inx     h       ; +5=12
        cmp     b       ; +4=16 ; compare with a Key
        jz      DSH0FF  ; +10=26
DSH0LL: stax    d       ; +7=33 ; it was not a Key so decode byte as is
        inx     d       ; +5=38
        jmp     DSH0L   ; +10=48 ; copying of unpacked data takes 48 clock cycles
DSH0FF: ...
а простое копирование байтов в 8080 (из HL в DE с размером блока в BC) занимает столько же:
Code:
loop:
 mov a,m ; +7=7
 stax d ; +7=14
 inx h ; +5=19
 inx d ; +5=24
 dcx b ; +5=29
 mov a,c ; +5=34
 ora b ; +4=38
 jnz loop ; +10=48
т.е. для плохосжимаемых данных оно занимает как минимум столько же, сколько и простое копирование :mrgreen:

Сжатые данные будут обрабатываться чуток похуже и мне нужен стек, чтобы периодически прятать туда внутренние переменные - с другой стороны это же подпрограмма - её вызвали через CALL т.е. стек в системе есть, однако ей похоже и память будет нужна, чтобы сохранять 2 байта по ходу пьесы (последняя использованная длинная дистанция - в z80-коде я юзал регистр IY для этой цели).

P.S. Вот как-то так получилось - размер после ассемблирования 137 байт:

 deshaff0.asm
Code:
; SHAFF0 block depacker for 8080/8085 written by Shaos on 27-JAN-2024
; See http://nedoPC.org/forum/ for more info about SHAFF packer
; This code is PUBLIC DOMAIN - use it on your own RISK!

; This depacker is doing decoding of a single data block with size <=16KB
; No SHAFF header is expected - it's already known that it's SHAFF0 format:
; 1st byte sets a Key to use further instead of #FF (but usually it's #FF)
; then any byte other than Key goes directly to output
; #FF 00000000 - single byte #FF, otherwise
; #FF 0xxxxxxx LENGTH - distance 1..127 and LENGTH (see below)
; #FF 10xxxxxx LENGTH - distance 128..190 and LENGTH (see below), but
; #FF 10111111 LENGTH - reuses previous long distance -191 or longer
; #FF 11xxxxxx xxxxxxxx LENGTH - directly encoded long negative distance, but
; #FF 11000000 00000000 - end of block (with no length after)
; where LENGTH encoded by 1 or 2 bytes:
; 1xxxxxxx - for 4..131
; 01xxxxxx - for 132..195
; 00xxxxxx xxxxxxxx - direcly encoded length for up to 16383

; Size of assembled code is 137 bytes
; HL - address of packed data (data starts with a key byte)
; DE - pointer to the buffer where depacked data should appear (16KB max)
; Subroutine uses 2 bytes of memory as variable (DSH0D)

DESHAFF0:
        mov     b,m     ; B is a Key byte (#FF in normal case)
        inx     h
DSH0L:  mov     a,m     ; +7=7  ; main loop
        inx     h       ; +5=12
        cmp     b       ; +4=16 ; compare with a Key
        jz      DSH0FF  ; +10=26
DSH0LL: stax    d       ; +7=33 ; it was not a Key so decode byte as is
        inx     d       ; +5=38
        jmp     DSH0L   ; +10=48 ; 1 byte of unpackable data takes 48 clock cycles
DSH0FF: mov     a,m     ; read byte after Key
        inx     h
        ora     a       ; check for 0
        jnz     DSH0F1
        mov     a,b     ; it was 0 after a Key so decode it as Key value
        jmp     DSH0LL  ; go back to the loop
DSH0F1: mov     c,a     ; it was not 0 after a Key so store it and
        ani     0C0H    ; check if it's 1-byte distance
        cpi     0C0H    ; by comparing 2 most significant bits with 11
        jz      DSH0F2  ; go to handle 2-byte case
        ; 1-byte distance
        mov     a,c     ; now check if distance is 191 (special case)
        cpi     0BFH
        jz      DSH0F3  ; go to special case handler
        push    b       ; temporarily push Key to stack
        xra     a       ; clear A and flagC
;       mov     b,a     ; here BC is a distance back (1..190)
;       mov     a,b     ; invert B
        cma
        mov     b,a
        mov     a,c     ; invert C
        cma
        mov     c,a
        inx     b       ; make it two's complement negative number
        jmp     DSH0LN  ; go to read length
        ; 2-byte distance
DSH0F2: push    b       ; temporary push Key to stack
        mov     b,c     ; it should be 2-byte distance, so this is higher byte
        mov     c,m     ; read lower byte of the distance
        inx     h
        ; now BC is a negative distance for 2-byte case - save it
        mov     a,c
        sta     DSH0D
        mov     a,b
        sta     DSH0DH
        ; check for end of the block
        mov     a,b
        cpi     0C0H    ; compare higher byte with #C0
        jnz     DSH0LN  ; go to read length
        mov     a,c
        ori     0       ; compare lower byte with #00
        jnz     DSH0LN  ; go to read length
        pop     b       ; balance the stack before return
        ret
DSH0F3: push    b       ; temporary push Key to stack
        ; retrieve stored distance
        lda     DSH0D
        mov     c,a
        lda     DSH0DH
        mov     b,a
        ; now BC is a negative distance for special case
DSH0LN: mov     a,m     ; read length code from stream
        add     a       ; check if bit 7 of length code was 1
        jnc     DSH0L1  ; if not go to next step
        ; 1xxxxxxx - Length 4..131 (0x80->4, 0x81->5 ... 0xFF->131)
        mov     a,m     ; read length code from stream again
        sui     7CH     ; convert code to actual length
DSH0L0: inx     h
        push    d       ; temporarily push DE to stack
        mvi     d,0     ; higher byte of the length is 0
        mov     e,a     ; lower byte of the length is taken from A
        jmp     DSH0L3
DSH0L1: add     a       ; check if bit 6 of length code was 1
        jnc     DSH0L2  ; if not go to next step
        ; 01xxxxxx - Length 132..195 (0x40->132, 0x41->133 ... 0x7F->195)
        mov     a,m     ; read length code from stream again
        adi     44H     ; convert code to actual length
        jmp     DSH0L0
DSH0L2: push    d       ; temporarily push DE to stack
        ; 00xxxxxx xxxxxxxx - Length up to 16383
        mov     d,m     ; read higher byte of the length from stream again
        inx     h
        mov     e,m     ; read lower byte of the length from stream
        inx     h
DSH0L3: xthl            ; exchange top of the stack (stored DE) with HL
        push    d       ; push length of the data to stack
        mov     d,h
        mov     e,l     ; now DE is current destination address
        dad     b       ; now HL is address of the reference
        pop     b       ; now BC is length of the data to copy
        ; perform copying of the data (as if it's LDIR)
DSH0L4: mov     a,m
        stax    d
        inx     h
        inx     d
        dcx     b
        mov     a,c
        ora     b
        jnz     DSH0L4
        pop     h       ; restore old source
        pop     b       ; restore a Key
        jmp     DSH0L   ; go back to main loop
DSH0D:  db      0       ; lower byte of last used long distance
DSH0DH: db      0       ; higher byte of last used long distance

Ща пойду проверять... вроде работает :mrgreen:

_________________
:dj: https://mastodon.social/@Shaos


27 Jan 2024 23:55
Profile WWW
Online
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22596
Location: Silicon Valley
Reply with quote
На эмуляторе Emu80 декодирование fonts.bff происходит почти мгновенно - завернул это всё в цикл, который запускается 100 раз и получил 12.8 секунд т.е. одна распаковка заняла 0.128 секунды, что примерно соответствует 1777777*0.128=227555 без учёта ПДП (надо чтоли научиться отключать его временно), а если предположить, что ПДП съедает 10% CPU, то это будет примерно 100 тактов на 1 байт (напомню, что сжатый SHAFF0 образ весит 1501 байт, которые распаковываются в 2048):

Вот исходник тестовой программки, собираемой через pdp11asm от vinxru:
Code:
.i8080
        ; i8080 assembler code
prompt  equ 0F86Ch
puts    equ 0F818h

        org 0
   jmp start

   ds 2045

start:
        lxi   h,msg
        call   0F818h

   lxi   h,100
   shld   count

mainloop:

   lxi   h,PACKED+12
   lxi   d,0
   call   deshaff0

   lhld   count
   dcx   h
   shld   count
   mov   a,l
   ora   h
   jnz   mainloop

        jmp   prompt

count   dw   0

msg:
        db 1fh,'SUPER-86RK/128K',0dh,0ah,0

.include "deshaff0.asm"

PACKED:

insert_file "fonts.bff"

make_radio86rk_rom "test.rkr"

После возвращения программы в монитор я сохранил образ памяти и сравнил с файлом fonts.bin - первые 2КБ как и ожидалось, совпадают :rotate:

P.S. 1/8 секунды на распаковку сжатых через SHAFF0 шрифтов это достаточно быстро - так что пожалуй надо ещё и депакер SHAFF1 на 8080 портировать, раз уж на то пошло :dj:
В этом случае сжатие будет ещё лучше - 1108 байт вместо 1501, но если сохранится тенденция и депакер SHAFF1 будет в 12 раз медленнее чем депакер SHAFF0 (как на Z80), то распаковка шрифтов займёт уже полторы секунды, но сэкономит ещё 400 байт...

_________________
:dj: https://mastodon.social/@Shaos


28 Jan 2024 11:53
Profile WWW
Online
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22596
Location: Silicon Valley
Reply with quote
Ребяты, а как ПДП отключить временно? Чото я с ходу не нахожу...

_________________
:dj: https://mastodon.social/@Shaos


28 Jan 2024 12:42
Profile WWW
Maniac
User avatar

Joined: 14 Oct 2019 18:10
Posts: 318
Location: Tashkent
Reply with quote
Shaos wrote:
Ребяты, а как ПДП отключить временно? Чото я с ходу не нахожу...
Code:
   MVI   A,080H
   STA   0E008H
   CALL   ВАШ_КОД
   CALL   0F82DH


28 Jan 2024 12:52
Profile WWW
Online
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22596
Location: Silicon Valley
Reply with quote
О, круто - спасибо! :)

Shaos wrote:
На эмуляторе Emu80 декодирование fonts.bff происходит почти мгновенно - завернул это всё в цикл, который запускается 100 раз и получил 12.8 секунд т.е. одна распаковка заняла 0.128 секунды, что примерно соответствует 1777777*0.128=227555 без учёта ПДП (надо чтоли научиться отключать его временно), а если предположить, что ПДП съедает 10% CPU, то это будет примерно 100 тактов на 1 байт (напомню, что сжатый SHAFF0 образ весит 1501 байт, которые распаковываются в 2048)

С выключенным ПДП сто циклов крутятся 9.4 секунды, т.е. ПДП съедает не 10%, как я предполагал, а все 35% CPU :eugeek:

Значит реальное быстродействие депакера SHAFF0 на 8080 (применительно к распаковке двойных шрифтов) - примерно 82 такта на 1 байт (что на 70% медленнее теоретического максимума 48 тактов на байт в случае непакуемых данных).

Поправленная тестовая программа - под спойлером:

 test.asm
Code:
.i8080
        ; i8080 assembler code
prompt  equ 0F86Ch
puts    equ 0F818h

        org 0
   jmp start

   ds 2045

start:
        lxi   h,msg
        call   0F818h

   ; disable DMA
   mvi   a,80H
   sta   0E008H

   lxi   h,100
   shld   count

mainloop:

   lxi   h,PACKED+12
   lxi   d,0
   call   deshaff0

   lhld   count
   dcx   h
   shld   count
   mov   a,l
   ora   h
   jnz   mainloop

   ; enable DMA
   call   0F82DH

        jmp   prompt

count   dw   0

msg:
        db 1fh,'SUPER-86RK/128K',0dh,0ah,0

.include "deshaff0.asm"

PACKED:

insert_file "fonts.bff"

make_radio86rk_rom "test.rkr"


P.S. Попробовал 1000 циклов - с работающий ПДП получилось по секундомеру 2:03 или 123 секунды, а с выключенным - 1:30 или 90 секунд, т.е. разница между ними 36.6% (это если в качестве основания брать работу без ПДП, а если считать какое будет ускорение при выключении ПДП, то получится порядка 26.8%). С такой точностью скорость распаковки получается примерно 78 тактов на байт (на самом деле скорость зависит от самих данных насколько они запакованы т.е. как много в них повторяющихся последовательностей).

P.P.S. Эмулятор Emu80 оказывается пишет время работы ПДП (как процент от общего времени работы) внизу справа - 27%

Attachment:
Screenshot from 2024-01-28 12-29-59.png
Screenshot from 2024-01-28 12-29-59.png [ 6.3 KiB | Viewed 1326 times ]

_________________
:dj: https://mastodon.social/@Shaos


28 Jan 2024 13:13
Profile WWW
Online
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22596
Location: Silicon Valley
Reply with quote
alexcp wrote:
1) Вывод 3 микросхемы IC9 ошибочно подключен к сигналу READY (вместо RESET). Из-за ошибки IC13A постоянно сброшен в ноль (как должно быть только после RESET и только до первого перехода на адрес Монитора) и, как следствие, всегда присутствует _CS_ROM. Исправляется высверливанием виа в районе резисторов R16,R27,R28 и соединением виа под ВИ53 (рядом с выводом 3 ВИ53) с сигналом RESET (например, вывод 1 ГФ24).

Наконец-то я это сделал - произвёл хирургическое вмешательство в свою продолжающуюся сборку Radio-86RK SRAM 128K для исправления вышеописанной ошибки через 10 лет после того как alexcp её обнаружил и предложил способ её устранения :roll:

Attachment:
rk86new-240128.jpg
rk86new-240128.jpg [ 291.04 KiB | Viewed 1251 times ]

После просверливания переходного отверстия округлённого на фотке надо будет RESET с первой ноги ГФ24 проводочком подать на третью лапку микросхемы IC9 (там как раз метализированное переходное отверстие имеется - на фотке это место помечено стрелочкой)...

_________________
:dj: https://mastodon.social/@Shaos


28 Jan 2024 20:20
Profile WWW
Online
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22596
Location: Silicon Valley
Reply with quote
По прошествию 10 лет таки расписал полную карту памяти для своего клона клона:
Code:
#0000...#7FFF - 32КБ окно статического ОЗУ (которое имеет размер 128КБ т.е. 4 страницы)
#8000...#8FFF - ВВ55 клавиатуры (также сюда подключены магнитофонные сигналы)
#9000...#9FFF - внешний разъём для подключения альтернативной ВВ55 или другой периферии
#A000...#AFFF - внешний разъём для подключения ВВ55 квазидиска (или программатора)
#B000...#BFFF - ВИ53 (музыкальный чип с тремя независимыми каналами как в Апогее или Векторе)
#C000...#C7FF - ВГ75 если выбрано окно ОЗУ 0, иначе уходит наружу как /CS_C000
#C800...#CFFF - Уходит наружу как /CS_C800
#D000...#D7FF - Уходит наружу как /CS_D000
#D800...#DFFF - Уходит наружу как /CS_D800
#E000...#EFFF - На запись обращается к ПДП, а на чтение - первые 4КБ восьмикилобайтного ПЗУ
#F000...#FFFF - На запись меняет страницу ОЗУ, а на чтение - вторые 4КБ восьмикилобайтного ПЗУ
и вставил её в первое сообщение топика, чтобы народу не приходилось самостоятельно по схеме разбираться.

P.S. Заодно немножко почистил тему от срача - если кто заметил, что тут стало меньше страниц.

P.P.S. Также, пока есть задор, исправил свою схему 10-летней давности в Eagle v5.12 по указаниям от alexcp, но разводку пока не исправляю и заказывать новый вариант не буду, пока не дособеру и не доотлажу старый вариант - может ещё чего вылезет например с переключением страниц ОЗУ или звуком, да и ещё надо выкинуть атмегу - может ещё и под цвет место освободится ;)

P.P.P.S. В следующей версии со сменным шрифтом (Super-86RK) планирую ещё побить #E000...#EFFF на пополам, чтобы вторая половина (#E800...#EFFF) использовалась для записи в шрифты и ещё надо будет добавить второй регистр управления (наряду с #F000) для управления новым цветом (переключение палитр/шрифтов и установку акцентов) - скорее всего это будет #F001 (т.е. эти два регистра будут чередоваться по всему диапазону #F000...#FFFF в чётных и нечётных адресах).

_________________
:dj: https://mastodon.social/@Shaos


29 Jan 2024 09:47
Profile WWW
Online
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22596
Location: Silicon Valley
Reply with quote
Shaos wrote:
Поставил ESC слева-вверху (будет копией АР2) и увёл РУС/ЛАТ вниз-направо перед ВК:
...
Плюс ещё пробелы отцентрировал в связи с добавлением кнопки в нижний ряд.

Размер клавы получается 8.90 x 3.15 дюймов (22.6см х 8.0см) - это вот под такие кнопки (фотка самодельной ZX-клавы, которую я с 2007 года собираю и никак дособирать не могу):

Image


Shaos wrote:
Доразводил порт A и порт B
...
Осталось развести несколько кнопок, что идут на порт C и резюков с диодами наставить...

Доразвёл порт C и наставил резюков, диодов и светодиодов, а также надписей понаписал :mrgreen:

Attachment:
RK-kbd-qwerty-5.jpg
RK-kbd-qwerty-5.jpg [ 120.87 KiB | Viewed 1120 times ]

Текущий размер платки 9.1 x 3.3 дюйма (23.1см х 8.4см)...

_________________
:dj: https://mastodon.social/@Shaos


31 Jan 2024 00:48
Profile WWW
Online
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22596
Location: Silicon Valley
Reply with quote
Shaos wrote:
Также, пока есть задор, исправил свою схему 10-летней давности в Eagle v5.12 по указаниям от alexcp, но разводку пока не исправляю и заказывать новый вариант не буду, пока не дособеру и не доотлажу старый вариант - может ещё чего вылезет например с переключением страниц ОЗУ или звуком, да и ещё надо выкинуть атмегу - может ещё и под цвет место освободится ;)

Выкинул атмегу - место освободилось только под разъёмы на матричную клаву :(
Ещё выкинул индикацию РУС/ЛАТ т.к. она теперь будет на плате клавы - в результате высвободился один инвертор, который я воткнул вместо одного вентиля И-НЕ, который до этого использовался как инвертор, а высвободившийся гейт И-НЕ вставил на разрешение буфера по рецепту от alexcp.
Также сделал плату ширше, чтобы заполнить все разрешённые стандартной лицензией 16x10 см и поставил туда гребёнки контактов - выводы ВГ75, которые могли бы представлять интерес (плюс 2 старших бита знакогенератора под цветной шрифт) - пока вот схема (плату недоразводил):


Attachments:
rk86new-sch.jpg
rk86new-sch.jpg [ 175.88 KiB | Viewed 1057 times ]

_________________
:dj: https://mastodon.social/@Shaos
01 Feb 2024 21:24
Profile WWW
Online
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22596
Location: Silicon Valley
Reply with quote
Доразводил плату беты :mrgreen:

Attachment:
rk86new-brd.jpg
rk86new-brd.jpg [ 489.47 KiB | Viewed 1057 times ]

Недоразведёнными остались шесть адресных линий на разъёме расширения (т.е. ещё меньше, чем в альфе): A2,A3,A4,A5,A6,A7 (если кому нужен будет разъём - например мне, то надо будет кинуть проводочки)

 кинуть проводочки
Проводочек на сигнал A2:
Attachment:
Screenshot from 2024-02-02 00-45-47.png
Screenshot from 2024-02-02 00-45-47.png [ 164.5 KiB | Viewed 1057 times ]


Проводочек на сигнал A3:
Attachment:
Screenshot from 2024-02-02 00-45-31.png
Screenshot from 2024-02-02 00-45-31.png [ 164.48 KiB | Viewed 1057 times ]


Проводочек на сигнал A4:
Attachment:
Screenshot from 2024-02-02 00-45-15.png
Screenshot from 2024-02-02 00-45-15.png [ 164.51 KiB | Viewed 1057 times ]


Проводочек на сигнал A5:
Attachment:
Screenshot from 2024-02-02 00-44-59.png
Screenshot from 2024-02-02 00-44-59.png [ 164.56 KiB | Viewed 1057 times ]


Проводочек на сигнал A6:
Attachment:
Screenshot from 2024-02-02 00-44-35.png
Screenshot from 2024-02-02 00-44-35.png [ 164.71 KiB | Viewed 1057 times ]


Проводочек на сигнал A7:
Attachment:
Screenshot from 2024-02-02 00-44-17.png
Screenshot from 2024-02-02 00-44-17.png [ 164.54 KiB | Viewed 1057 times ]


Монтажка:

Attachment:
rk86new-place.jpg
rk86new-place.jpg [ 143.12 KiB | Viewed 1057 times ]


Архив с исходниками и герберами (тот же урл, что был для альфы, но теперь там бета):

http://nedopc.org/nedopc/radio/rk86new.zip (2.2MB)

Тут же в архиве есть ZIP с герберами в формате JLCPCB - они берутся изготовить 5 плат за полсотни баксов плюс доставка:

Attachment:
Screenshot from 2024-02-04 20-58-45.png
Screenshot from 2024-02-04 20-58-45.png [ 380.33 KiB | Viewed 858 times ]


Интересно, что пока я не был залогинен они показывали цену $36, а как залогинился и перезалил - добавили "Via Covering" $16.96 - это типа покрытие переходных отверстий? Я как бы их файл конверсии использовал для игла - выходит они специально там их открыли, чтобы потом денег "лишних" содрать при заказе за их закрытие...

_________________
:dj: https://mastodon.social/@Shaos


02 Feb 2024 02:04
Profile WWW
Online
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22596
Location: Silicon Valley
Reply with quote
Не вывел 2 тактовых сигнала для регистра аля Апогей - их придётся проводочками цеплять прям к ногам микрух (а то мало ли - наводки мне наведут при таком плотной разводке)

P.S. Внешний вид платы с приближением:

Image

P.P.S. Если сделать эту версию платки в синем цвете, то она может выглядеть примерно так:

Attachment:
rk86new-gerbv-blue.jpg
rk86new-gerbv-blue.jpg [ 238.04 KiB | Viewed 958 times ]


P.P.P.S. Список компонентов для этой версии платы:

Code:
Partlist

Exported from rk86new.sch at 2/1/24 11:20 PM

EAGLE Version 5.12.0 Copyright (c) 1988-2011 CadSoft

Part     Value          Device          Package      Library        Sheet

C1       0.47           C-EU025-030X050 C025-030X050 rcl            1
C2       1.0            C-EU025-030X050 C025-030X050 rcl            1
C3       47.0           CPOL-EUE2.5-6   E2,5-6       rcl            1
C4       22n            C-EU025-025X050 C025-025X050 rcl            1
C5       0.22           C-EU025-025X050 C025-025X050 rcl            1
C6       2200           C-EU025-025X050 C025-025X050 rcl            1
C7       0.1            C-EU025-025X050 C025-025X050 rcl            1
C8       0.1            C-EU025-025X050 C025-025X050 rcl            1
C9       0.1            CPOL-EUB45181B  B45181B      rcl            1
C10      50.0           CPOL-EUE2,5-6E  E2,5-6E      rcl            1
C11      0.1            CPOL-EUB45181B  B45181B      rcl            1
C12      0.1            CPOL-EUB45181B  B45181B      rcl            1
C13      100.0          CPOL-EUE2,5-6E  E2,5-6E      rcl            1
C14      200.0          CPOL-EUE2,5-6E  E2,5-6E      rcl            1
C15      0.15           C-EU025-025X050 C025-025X050 rcl            1
C16      1.0            C-EU025-030X050 C025-030X050 rcl            1
C17      0.1            CPOL-EUB45181B  B45181B      rcl            1
C18      0.1            CPOL-EUB45181B  B45181B      rcl            1
C20      0.1            CPOL-EUB45181B  B45181B      rcl            1
C21      0.1            CPOL-EUB45181B  B45181B      rcl            1
C22      0.1            CPOL-EUB45181B  B45181B      rcl            1
C23      0.1            CPOL-EUB45181B  B45181B      rcl            1
C24      0.1            C-EUC0805K      C0805K       rcl            1
C25      0.1            CPOL-EUB45181B  B45181B      rcl            1
C26      0.1            CPOL-EUB45181B  B45181B      rcl            1
C27      0.1            CPOL-EUB45181B  B45181B      rcl            1
C28      0.1            CPOL-EUB45181B  B45181B      rcl            1
C29      0.1            C-EUC0805K      C0805K       rcl            1
C30      0.1            C-EUC0805K      C0805K       rcl            1
C31      0.1            C-EUC0805K      C0805K       rcl            1
C32      0.1            C-EUC0805K      C0805K       rcl            1
C33      0.1            C-EUC0805K      C0805K       rcl            1
C34      0.1            C-EUC0805K      C0805K       rcl            1
C35      0.1            C-EUC0805K      C0805K       rcl            1
C36      0.1            C-EUC0805K      C0805K       rcl            1
C37      0.1            C-EUC0805K      C0805K       rcl            1
C38      0.1            C-EUC0805K      C0805K       rcl            1
C39      0.1            C-EUC0805K      C0805K       rcl            1
D1       1N4148         1N4148DO35-7    DO35-7       diode          1
D3       1N4148         1N4148DO35-7    DO35-7       diode          1
IC1      8224           8224            DIL16        micro-intel    1
IC2      8257           DIL40           DIL40        ic-package     1
IC3      74LS92D        74LS92D         SO14         74xx-us        1
IC4      74LS08D        74LS08D         SO14         74xx-us        1
IC5      74LS86D        74LS86D         SO14         74xx-us        1
IC6      8080A          8080            DIL40        micro-intel    1
IC7      8212           DIL24-6         DIL24-6      ic-package     1
IC8      8275           DIL40           DIL40        ic-package     1
IC9      74LS04D        74LS06D         SO14         74xx-us        1
IC10     74ALS00D       74ALS00D        SO14         74xx-us        1
IC11     74LS138D       74LS138D        SO16         74xx-us        1
IC12     27C16          2716            DIL24        memory         1
IC13     74LS74D        74LS74D         SO14         74xx-us        1
IC14     8255A          8255A           DIL40        micro-intel    1
IC15     74198N         74198N          DIL24-6      74xx-us        1
IC17     27C64          2764            DIL28        memory         1
IC21     CA3140N        CA3140N         DIL08        linear         1
IC32     CY62128        LP621024CM      SOP32L       memory         1
IC33     74LS74D        74LS74D         SO14         74xx-us        1
IC34     74LS32D        74LS32D         SO14         74xx-us        1
IC35     74LS32D        74LS32D         SO14         74xx-us        1
IC36     74LS245DW      74LS245DW       SO20W        74xx-us        1
IC37     74ALS00D       74ALS00D        SO14         74xx-us        1
IC38     74LS32D        74LS32D         SO14         74xx-us        1
IC39     8253           8253            DIL24-6      micro-intel    1
JP1                     PINHD-2X2       2X02         pinhead        1
JP2                     PINHD-2X2       2X02         pinhead        1
LED1                    LED3MM          LED3MM       led            1
LED2                    LED3MM          LED3MM       led            1
LED3                    LED3MM          LED3MM       led            1
LED4                    LED3MM          LED3MM       led            1
LSP1     SE14           SE14            SE14         solpad         1
LSP2     SE14           SE14            SE14         solpad         1
LSP3     SE14           SE14            SE14         solpad         1
Q1       16 MHz         CRYSTALHC49U70  HC49U70      crystal        1
R1       2K             R-EU_0207/2V    0207/2V      rcl            1
R2       1.6K           R-EU_0207/2V    0207/2V      rcl            1
R3       1K             R-EU_0207/2V    0207/2V      rcl            1
R4       800            R-EU_0207/2V    0207/2V      rcl            1
R5       10K            R-EU_0207/2V    0207/2V      rcl            1
R7       330            R-EU_0207/2V    0207/2V      rcl            1
R8       330            R-EU_0207/2V    0207/2V      rcl            1
R9       330            R-EU_0207/2V    0207/2V      rcl            1
R10      1.2K           R-EU_0207/2V    0207/2V      rcl            1
R11      3.3K           R-EU_0207/2V    0207/2V      rcl            1
R12      3.3K           R-EU_0207/2V    0207/2V      rcl            1
R13      3.3K           R-EU_0207/2V    0207/2V      rcl            1
R14      3.3K           R-EU_0207/2V    0207/2V      rcl            1
R15      1K             R-EU_0207/2V    0207/2V      rcl            1
R16      680            R-EU_0207/2V    0207/2V      rcl            1
R17      1K             R-EU_0207/2V    0207/2V      rcl            1
R18      51             R-EU_0207/2V    0207/2V      rcl            1
R19      150            R-EU_0207/2V    0207/2V      rcl            1
R20      1.6K           R-EU_0207/2V    0207/2V      rcl            1
R21      1.6K           R-EU_0207/2V    0207/2V      rcl            1
R22      1.6K           R-EU_0207/2V    0207/2V      rcl            1
R23      12K            R-EU_0207/2V    0207/2V      rcl            1
R24      2.4K           R-EU_0207/2V    0207/2V      rcl            1
R25      330            R-EU_0207/2V    0207/2V      rcl            1
R26      10K            R-EU_0207/2V    0207/2V      rcl            1
R27      10K            R-EU_0207/2V    0207/2V      rcl            1
R28      10K            R-EU_0207/2V    0207/2V      rcl            1
RN1      10K            G09R            SIL10        resistor-sil   1
T1       2N3904         2N3904          TO92         transistor     1
T2       2N3904         2N3904          TO92         transistor     1
X1                      PINHD-1X4       1X04         pinhead        1
X2       VIDEO          TOBU3           TOBU3        con-hirschmann 1
X3                      M15HP           M15HP        con-subd       1
X4                      M15HP           M15HP        con-subd       1
X5       IN             TOBU3           TOBU3        con-hirschmann 1
X6                      W237-04P        W237-4P      con-wago-508   1
X7       OUT            TOBU3           TOBU3        con-hirschmann 1
X8       S-VIDEO        MD04SS          MDIN04SS     con-yamaichi   1
X9                      PINHD-1X8       1X08         pinhead        1
X10                     PINHD-1X30      1X30         pinhead        1
X11                     PINHD-1X2       1X02         pinhead        1
X12                     PINHD-2X8       2X08         pinhead        1
X13                     PINHD-1X10      1X10         pinhead        1
X14                     PINHD-1X4       1X04         pinhead        1

_________________
:dj: https://mastodon.social/@Shaos


02 Feb 2024 10:50
Profile WWW
Online
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22596
Location: Silicon Valley
Reply with quote
Post Re:
Shaos wrote:
Shaos wrote:
... теперь ввод с магнитофона и контроллер ЭЛТ в области #C000...#C7FF будут работать только в нулевой странице памяти (индикация светодиодом LED5), а во всех остальных страницах (1,2,3) вместо ввода с магнитофона на PC4 клавиатурной ВВ5 пойдёт вертикальная синхра с ВГ75 (чтобы программно ловить момент окончания кадра), а в области #C000...#C7FF будет располагаться внешняя плата, подключенная через 28-пиновый разъём...

И кстати монитор нормально сможет только в стартовой странице работать (то бишь нулевой), т.к. его переменные находятся в переключаемой части памяти и соответственно после переключения на любую другую страницу, будут уходить в тень. Я планирую для неиспользуемой части ПЗУ написать процедурки для копирования данных между страничками и для передачи управления в другие странички...

Кстати экранная область будет всегда из активной страницы ОЗУ браться! Это значит, что чтобы не сбивалась синхронизация на телеке, надо заполнить нулями область экрана во всех четырёх страницах! Также это означает, что у нас есть 4 РАЗНЫХ ЭКРАНА, которые могут мгновенно переключаться между собой :o

P.S. Интересно, считать это "багом" или "фичей"? Я думаю изначально (конец 2013) я наверное планировал, чтобы ПДП обращался только к нулевой странице ОЗУ - по идее это реализуемо, но потребует некоторой дополнительной логики...

_________________
:dj: https://mastodon.social/@Shaos


02 Feb 2024 19:56
Profile WWW
Online
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22596
Location: Silicon Valley
Reply with quote
Раз уж мы взялись править монитор (хотя бы для того, чтобы почистить все экраны), то можно некоторые апогеевские директивы добавить - ниже список букв в алфавитном порядке где подсвечено жирным то, что было на РК86 (и стрелочками что хотелось бы добавить):

A - загрузить данные с магнитофона в формате Микроши
B - сохранить данные на магнитофон в формате Микроши
C - сравнить блоки данных в памяти
D - напечатать значения байтов из памяти в 16-ричном виде
E
F - заполнить память байтом
G - запуск программы по адресу
H - показать сумму и разность двух слов <==
I - загрузить данные с магнитофона
J - прочитать данные с магнитофона в формате MSX
K - посчитать контрольную сумму блока данных <==
L - напечатать значения байтов из памяти в виде символов
M - вывод и модификация ячеек памяти
N
O - вывести данные на магнитофон
P - тест ОЗУ и ПЗУ ???
Q - показать константы скорости для работы с магнитофоном
R - чтение данных из квазидиска
S - произвести поиск байта в диапазоне адресов
T - пересылка блока данных в пределах памяти
U - скрытая директива, перекидывающая на адрес 0F000H
V - недокументированная директива для записи во внешнее запоминающее устройство
W - произвести поиск слова в диапазоне адресов <==
X - вывод и модификация содержимого регистров процессора
Y
Z - сохранить данные на магнитофон в фромате MSX

Также можно добавить директиву дизассемблера и скажем помощь

P.S. В существующем мониторе РК уже есть типа "пользовательская" директива U - если её ввести, то управление будет передано на адрес #F000 (туда же будет передано управление, если введённая директива непонятна) - вот на неё и можно прицепить дизассемблер :)

_________________
:dj: https://mastodon.social/@Shaos


03 Feb 2024 03:44
Profile WWW
Senior
User avatar

Joined: 17 Jun 2014 04:29
Posts: 138
Location: 93.80.157.217
Reply with quote
вместо того, чтоб разместить в Мониторе действительно полезный код, давайте его забьём мусором?
как часто понадобиться загружаться с магнитофона во всех мыслимых форматах?

_________________
https://radio-86rk.ru
кто я такой, чтобы спорить с самим собой


03 Feb 2024 04:39
Profile WWW
Display posts from previous:  Sort by  
Reply to topic   [ 265 posts ]  Go to page Previous  1 ... 12, 13, 14, 15, 16, 17, 18  Next

Who is online

Users browsing this forum: Hammer, Shaos and 80 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
cron
Powered by phpBB® Forum Software © phpBB Group
Designed by ST Software.