там будет что-то типа:
lp1:
in a,(#1f)
rra
jp c,lp1
...
lp2:
in a,(#1f)
rra
jp nc,lp2
...
грубо, с избыточностью, ну пусть тактов 50 на полбайта, 100 на байт, 600 байт на прерывание, 30000 байт на сек.
там будет что-то типа:
lp1:
in a,(#1f)
rra
jp c,lp1
...
lp2:
in a,(#1f)
rra
jp nc,lp2
...
грубо, с избыточностью, ну пусть тактов 50 на полбайта, 100 на байт, 600 байт на прерывание, 30000 байт на сек.
Последний раз редактировалось char; 20.09.2015 в 12:16.
а что распространеннее и доступнее для юзера - разъем кемпстона или шина?
---------- Post added at 15:32 ---------- Previous post was at 15:21 ----------
кстати, можно и быстрее, наверное, - если передавать-ловить пакетами, синхронизируясь не на каждый новый полубайт, а лишь перед получением очередной пачки в несколько байт...
Подпрограмма загрузки 256 байтов.
На загрузку байта тратится 11+18+11+18+4+13=75 тактов.Код:10 in a, (#1F) ; 11 rld ; 18 in a, (#1F) ; 11 rld ; 18 inc l ; 4 djnz 10B ; 13
Чтобы загрузить 48К потребуется около 48*1024*75/3500000 = 1.05 секунды.
Последний раз редактировалось zx-kit; 20.09.2015 в 13:08.
"L-256"
это все понятно, но вот синхронизацию передачи pc<->zx, необходимость избыточности или нет, количество повторов байт для стабильного захвата на zx - все это нужно тестировать...
по факту же - программа для юзера будет стартовать "моментально" / сразу после "как-магнитофонной загрузки небольшого бейсик-файла"...
Этим занимается микросхема FT232. У нее внутри протокол USB с контролем ошибок. Нам надо выбрать скорость последовательного порта. И прикинуть, сможет ли с такой скоростью микроконтроллер готовить данные. Кварц возьмем 11.0592, чтобы точно установить скорость UART. Останавливать и возобновлять прием будет микроконтроллер. В FT232 есть буфер приемника.
Да, на мой взгляд, несколько секунд подождать - это не проблема. Даже для 128К.по факту же - программа для юзера будет стартовать "моментально" / сразу после "как-магнитофонной загрузки небольшого бейсик-файла"...
---------- Post added at 15:57 ---------- Previous post was at 15:17 ----------
Определим скорость UART.
Обычно на передачу одного байта надо передать 10 бит. Мы 48 килобайт можем загрузить за 1.05 секунды.
Значит в битах скорость нужна более 10*48*1024/1.05=468114 бит в секунду
У AVR Max Baud Rate = 230400. Маловато будет.
Значит мы сможем загружать со скоростью 230400/10 = 23040 байт в секунду.
Загрузка 48КB: 48*1024/23040 = 2.13 c
Загрузка 128КB: 128*1024/23040 = 5.69 c
Тоже неплохо.
---------- Post added at 16:53 ---------- Previous post was at 15:57 ----------
В справке по QSerialPort Max 115200 baud. Маловато будет.
Значит мы сможем загружать со скоростью 115200/10 = 11520 байт в секунду.
Загрузка 48КB: 48*1024/23040 = 4.26 c
Загрузка 128КB: 128*1024/23040 = 11.38 c
Не очень быстро, зато с SD-картами и прочими носителями ходить не надо. Можно добавить вычисление контрольных сумм.
Последний раз редактировалось zx-kit; 20.09.2015 в 14:56.
"L-256"
если со стороны pc берется медленная херня, то тогда достаточно и магнитофонного порта.
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
попинай товарища SamStyle, может найдёшь доводы, чтобы он в свой Xpeccy твой графрежим впихнул - будешь на нём проверять. Отладчик там довольно неплохой...
Мои интры: [Kukarachess][Super boot rmx][tRUSHE MOSAIc][BLAZE]
Мои игры: [Overload][Removal]
Список игр для ZX-Spectrum: [2015] [2014]
Не убедил...
Помогите с исходниками подпрограммы восстановления регистров при загрузке образа SNA и запуске с требуемого адреса. На ассемблере для Z80. Надо для загрузки образов SNA
Планирую работы по быстрой загрузке в таком порядке:
1. Загрузка WAV файлов через USB-UART+AVR для турбо-загрузки за 30 сек.
2. Загрузка SNA файлов после эмулятора или ассемблера за 5 сек для 48К и 12 сек для 128K.
3. Доработка ПЗУ для загрузки стандартной командой LOAD " " ENTER за 5 сек для 48К и 12 сек для 128K.
Также нужны исходники для AVR для загрузки через UART на скорости 115200 Бод с приостановкой для синхронизации со скоростью 44.1 кГц для WAV и около 11 кГц для SNA. То есть настройки и подпрограмма чтения для кварца 11.0592 МГц.
Нет так нет. Придется делать самому. Но хотелось бы не изобретать велосипед.
Принцип работы устройства предполагается такой:
Создаем два вспомогательных файла WAV.bat и SNA.bat.
Там пишем команды по настройке скорости последовательного порта и отправки файла командой COPY как описано тут.
Надо только указать скорость 115200 и название соответствующего файла.Код:@ECHO OFF SETLOCAL set ComPort=COM8 echo. echo. echo 1 - Exolon (turbo) echo 2 - SilkWorm (turbo) echo 3 - Dizzy V echo 4 - R-Type echo. echo. set /p UserInput=[your choice?] mode %ComPort% baud=460800 data=8 parity=n stop=1 octs=on rts=off if %UserInput%==1 copy Exolon.wav /b \\.\%ComPort% if %UserInput%==2 copy SilkWorm.wav /b \\.\%ComPort% if %UserInput%==3 copy Dizzy_V.wav /b \\.\%ComPort% if %UserInput%==4 copy R-Type.wav /b \\.\%ComPort% ENDLOCAL ECHO ON
Выбираем для запуска по-умолчанию файлов SNA и WAV настроенные bat-файлы.
Теперь на Спектруме набираем команду загрузки, а на PC - двойной щелчек мышкой по загружаемому файлу.
Только для загрузки SNA надо в бат-файл добавить еще загрузку Бейсик-файла, внутри которого загрузчик в кодах FAST PC LOADER.
Микроконтроллер ATMEGA48PA-AU будет принимать данные через UART и подавать с нужной скоростью на вход TAPE-IN Спектрума.
- - - Добавлено - - -
Перед отправкой данных через USB-UART надо отправлять в символьном виде:
Расширение файла: SNA, WAV, TAP, BAS, COD, BIN и т.п., насколько хватит фантазии и интереса в реализации.
Потом тоже в символьном виде шестнадцитиричные параметры:
Номер страницы для загрузки кодов - 2 символа
Адрес загрузки кодов - 4 символа, например, C000
Размер блока - 4 символа
В принципе, в бат файле можно даже указать параметры типа SPA - адрес установки стека, JMP - адрес запуска кодов.
Там можно подумать о загрузке как раньше было с магнитофона, а теперь с PC через USB - шнурок.
Плату FAST PC LOADER планируется встраивать в корпус компьютеров с памятью 48 и 128 К.
- - - Добавлено - - -
Отправка файлов WAV через USB-UART в WINDOWS настроена. Содержимое файла WAV.bat:
В результате работы выводится такая картинка:Код:@ECHO OFF SETLOCAL set ComPort=COM8 mode %ComPort% baud=115200 data=8 parity=n stop=1 octs=on rts=off echo %1 echo. copy %1 /b \\.\%ComPort% pause 0 ENDLOCAL ECHO ON
Осталось настроить прием файла Атмегой и отправку в Спектрум.
Последний раз редактировалось zx-kit; 08.11.2015 в 20:44.
"L-256"
В исходниках unsnap'а что-то подобное было
Спасибо, не помогло. Вот нашел на WOS описание формата SNA:
SNA Format
This format is one of the most well-supported of all snapshot formats, but has a drawback:
As the program counter is pushed onto the stack so that a RETN instruction can restart the program, 2 bytes of memory are overwritten. This will usually not matter; the game (or whatever) will have stack space that can be used for this. However, if this space is all in use when the snap is made, memory below the stack space will be corrupted. According to Rui Ribeiro, the effects of this can sometimes be avoided by replacing the corrupted bytes with zeros; e.g. take the PC from the, stack pointer, replace that word with 0000 and then increment SP. This worked with snapshots of Batman, Bounder and others which had been saved at critical points. Theoretically, this problem could cause a complete crash on a real Spectrum if the stack pointer happened to be at address 16384; the push would try and write to the ROM.
When the registers have been loaded, a RETN command is required to start the program. IFF2 is short for interrupt flip-flop 2, and for all practical purposes is the interrupt-enabled flag. Set means enabled.
Offset Size Description
------------------------------------------------------------------------
0 1 byte I
1 8 word HL',DE',BC',AF'
9 10 word HL,DE,BC,IY,IX
19 1 byte Interrupt (bit 2 contains IFF2, 1=EI/0=DI)
20 1 byte R
21 4 words AF,SP
25 1 byte IntMode (0=IM0/1=IM1/2=IM2)
26 1 byte BorderColor (0..7, not used by Spectrum 1.7)
27 49152 bytes RAM dump 16384..65535
------------------------------------------------------------------------
Total: 49179 bytes
The 128K version of the .sna format is the same as above, with extensions to include the extra memory banks of the 128K/+2 machines, and fixes the problem with the PC being pushed onto the stack - now it is located in an extra variable in the file (and is not pushed onto the stack at all). The first 49179 bytes of the snapshot are otherwise exactly as described above, so the full description is:
Offset Size Description
------------------------------------------------------------------------
0 27 bytes SNA header (see above)
27 16Kb bytes RAM bank 5 \
16411 16Kb bytes RAM bank 2 } - as standard 48Kb SNA file
32795 16Kb bytes RAM bank n / (currently paged bank)
49179 2 word PC
49181 1 byte port 0x7ffd setting
49182 1 byte TR-DOS rom paged (1) or not (0)
49183 16Kb bytes remaining RAM banks in ascending order
...
------------------------------------------------------------------------
Total: 131103 or 147487 bytes
The third RAM bank saved is always the one currently paged, even if this is page 5 or 2 - in this case, the bank is actually included twice. The remaining RAM banks are saved in ascending order - e.g. if RAM bank 4 is paged in, the snapshot is made up of banks 5, 2 and 4 to start with, and banks 0, 1, 3, 6 and 7 afterwards. If RAM bank 5 is paged in, the snapshot is made up of banks 5, 2 and 5 again, followed by banks 0, 1, 3, 4, 6 and 7.
Обычные регистра я загрузить смогу, а вот как правильно настроить прерывания, стек и запуск программы ?
Описание не точное, вместо word надо читать byte !
Последний раз редактировалось zx-kit; 09.11.2015 в 16:19.
"L-256"
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)