I use a Sinclair ZX Spectrum Issue 2 with a DivMMC EnJOY! Pro One
and the boot process shows no error and I’m even able to enter the
file browser but if I choose any game/demo/program I get always garbage:
YouTube Link: https://www.youtube.com/watch?v=9bGBzDCBbKk
Here my CPU (NEC D780C-1) with modification:
https://i.imgur.com/eoDEX7N.jpg
Any idea what’s wrong here?
Thx
hippietrail
5,8211 gold badge17 silver badges49 bronze badges
asked Apr 7, 2019 at 17:28
Does your divmmc work in another machine?
Anyway, there is a single common problem in 48k spectrums: on the edge connector, +12v and /M1 signals are neighbouring. When some device is inserted too much unaligned, chances are that +12v would shortcircuit to /M1.
Since 48k «chipset» does not use /M1, with enough luck this could pass unnoticed to the user — the machine still works, but /M1 output is burned out. And DivMMC needs /M1 anyway.
The only way to fix that is to replace Z80.
answered Apr 7, 2019 at 21:08
lvdlvd
9,65622 silver badges59 bronze badges
6
So the real issue was a problem with memory!
based on the ZX Spectrum Service Manual
I did a RAM test:
Execute the command PRINT PEEK 23732+PEEK 23733*256
and the result should
be 65535
! (for a 48k machine)
I got 49344
-> error in 49345
: (shows always the last working address)
- key in:
POKE 49345,85: PRINT PEEK 49345 (=A)
- key in:
POKE 49345,170: PRINT PEEK 49345 (=B)
If answer A is anything other than 85 or answer B other than 170 look into
this table to find the faulty RAM IC: (mine was IC16)
So I have replaced the faulty IC16 and now I’m able to work with DivMMC!
answered Apr 12, 2019 at 14:08
leon22leon22
1594 bronze badges
Содержание
- Zx spectrum loading error
- Zx spectrum loading error
- Zx Spectrum Loading Error
- R Tape loading error — Shredzone
- «ZX Spectrum Loading Error» T-shirt by PlopCulture Redbubble
- R Tape loading error, Part 2 — Shredzone
- LR-Fuse won’t load ZX Spectrum ROMS — RetroPie Forum
- R Tape loading error Avaragado’s blog
- Funky ZX Spectrum loading sound — YouTube
- Retro Isle — Sinclair ZX Spectrum- How to Get it Running!
- ZX Spectrum — Wikipedia
- Zx Spectrum Loading Error Fixes & Solutions
Zx spectrum loading error
Сообщения об ошибках
При обнаружении ошибки интерпретатор останавливает выполне-
ние программы (или бейсик-оператора, набранного в непосредст-
венном режиме) и выводит в нижней части экрана соответствую-
щее сообщение. Каждое сообщение содержит код (цифру или
букву), указание на причину ошибки и номер строки и оператора
в ней, на котором остановилось выполнение программы.
Успешное завершение программы или попытка перейти на
строку с номером, большим любого, имеющегося в программе.
1 NEXT without FOR__NEXT без FOR
встречен оператор NEXT без соответствующего FOR.
2 Variable not found _переменная не найдена
переменная была использована без присвоения ей значения или
загрузки значения с ленты.
3 Subscript wrong_неправильный индекс
значение индекса вышло за границу размерности массива.
4 Out of memory____нет памяти
не хватает памяти для выполнения оператора.
5 Out of screen_выход за экран
оператор INPUT сгенерировал более 22 строк в нижней части
экрана, или в AT был использован номер строки, превышающий
21.
6 Number to big_число слишком велико
в результате вычислении получается число больше 1,7*10
(возможно, была попытка деления на 0).
7 RETURN without GOSUB_RETURN без GO SUB
число операторов RETURN больше числа GO SUB.
8 End of file_конец файла
сообщение в Spectrum-Бейсике не используется.
9 STOP statement__оператор STOP
был использован оператор STOP для остановки программы.
CONTINUE продолжит выполнение со следующего оператора.
A Invalid argument_недопустимый аргумент
функция получила недопустимое значение аргумента.
В Integer out of range_округление вышло за границы
значение было округлено до ближайшего целого и не попало в
допустимый диапазон.
С Nonsense in BASIC_бессмысленно « Бейсике
оператор не имеет смысла с точки зрения Spectrum-Бейсика.
D BREAK — CONT repeats_прерывание — CONTINUE повторит
останов по клавише Break. CONTINUE повторит оператор, при
выполнении которого произошло прерывание.
Е Out of DATA___нет данных
количество считываний данных операторами READ превысило
количество элементов данных в операторах DATA.
F Invalid file name_недопустимое имя файла
в операторе SAVE указано недопустимое имя файла (меньше
одного символа или больше 10 символов) либо использовано
недопустимое имя канала в операторе OPEN# (см. [1]).
G No room for line__нет места для строки
не хватает свободной памяти для ввода новой строки программы.
Н STOP in INPUT_STOP в операторе INPUT
ввод STOP на запрос оператора INPUT.
I FOR without NEXT____FOR без NEXT
число операторов NEXT меньше числа операторов FOR, и одновре-
менно некорректно заданы предельное значение управляющей
переменной и шаг ее изменения.
J Invalid I/O device_недопустимое устройство ввода/вывода
сообщение, используемое при работе С каналами и потоками (см.
[1]).
К Invalid colour_недопустимый цвет
задано недопустимое значение в INK, PAPER, FLASH, INVERSE или
OVER, или использован недопустимый управляющий символ.
L BREAK into program___прерывание программы
нажата клавиша Break. В сообщении указывается оператор,
выполненный последним. Оператор CONTINUE продолжит выпол
нение программы со следующего оператора.
М RAMTOP no good_недопустимый RAMTOP
значение, занесенное в системную переменную RAMTOP, слиш-
ком мало.
N Statement lost_нет оператора
была предпринята попытка перехода на несуществующий опе-
ратор.
О Invalid stream___недопустимый поток
сообщение, используемое при работе с потоками (см. [1]).
P FN without DEF__FN без DEF
вызов функции пользователя без ее определения.
Q Pirimetr error______ошибка в параметрах
оператор FN содержит неверное количество параметров, или
один из них имеет значение неправильного типа (например,
символьное вместо числового или наоборот).
R Таре loading error ошибка при загрузке с ленты
неудачно прошла процедура загрузки, подгрузки или проверки
файла.
Источник
Zx spectrum loading error
Краткое содержание: LOAD, SAVE, VERIFY, MERGE
Основные команды работы с магнитофоном LOAD, SAVE и VERIFY уже
рассматривались во вводном описании. Вы могли видеть, что LOAD затирает
старую программу в памяти компьютера при загрузке новой программы с
ленты. Есть другая команда MERGE, не делающая этого. Эта команда стирает
лишь те строки старой программы или переменные, которые совпадают с но-
мерами строк новой программы или именами новых переменных.
Программу «DICE» («Игральная кость») из главы 11 запишем на ленту
под именем «DICE». А теперь введём и выполним следующую программу:
2 PRINT 2
10 PRINT 10
20 LET X=20
А затем осуществим её проверку, заменив команду VERIFY «DICE» на
команду MERGE «DICE». Вы увидите, что строки 1и 2 сохраняются, а строки
10 и 20 заменяются на строки с этими номерами из программы «DICE»,
переменная X тоже сохраняется (проверьте — PRINT X).
Теперь Вы знаете четыре оператора для работы с кассетным магнитофо-
ном:
SAVE — записывает программу и переменные на магнитофон;
VERIFY — проверяет программу и переменные в памяти компьютера по
их копии на ленте;
LOAD — очищает память компьютера от всех программ и загружает в неё
новые, считанные с магнитофона;
MERGE — подобна LOAD, только не очищает всю память, а лишь заменя-
ет те строки программы или переменные, у которых совпадают номера или
имена с такими же на магнитной ленте.
За каждой из этих команд следует ключевое слово — имя программы,
определённое первоначально в команде SAVE. Пока компьютер ищет указан-
ную программу, он выводит имена всех программ, уже прочитанных с ленты.
Имеются две возможности для загрузки и запуска программ с ленты;
• Вариант 1. В операторах LOAD, VERIFY и MERGE вместо имени
можно указать пустую строку. Тогда будет взят первый
встретившийся файл и затем выполнить команду RUN.
• Вариант 2. С использованием оператора SAVE
SAVE «string» LINE number
Программа запишется на ленту так, что когда она будет вновь считана
по команде LOAD (но не MERGE), она автоматически установится на строку
с указанным номером и сама инициирует своё выполнение.
Кроме текстов программ на ленту можно записывать также массивы или
данные.
Записать на ленту массив Вы можете, используя команду SAVE с DATA
таким образом:
SAVE «string» DATA array name О
Здесь «string» — т/1мя, присваиваемое файлу данных, которое может
состоять из букв или букв и символа «$» (перечёркнутая буква S). Для строко-
вых данных^это требование здесь не важно.
Загружаются такие данные по команде:
LOAD «string» DATA array nameO
нельзя использовать оператор MERGE.
Если загружается строковый массив, то после обнаружения его ма лен-
те, компьютер выдаёт: «Character array:» и далее имя этого массива.
Существует возможность записи на магнитную ленту и отдельных бай-
тов информации. Так, например, это может быть телевизионная картинка или
определяемые пользователем графические символы и т д. Для этого исполь-
зуется ключевое слово CODE.
Например:
SAVE «Picture» CODE 16384,6912
LOAD «Picture» CODE
после CODE можно указать числа:
LOAD «Picture» CODE start, lenght
lenght — (длина) определяет сколько данных (в байтах) надо загрузить с
ленты. Если длина больше, чем записано на ленту, то выдаётся сообщение «R
Таре loading error . » (ошибка загрузки с ленты). Этот параметр можно
опустить, и тогда компьютер считает все данные, которые записаны на ленте.
start — (начало) указывает адрес, с которого должны загружаться данные
и может быть отличным от адреса, указанного в SAVE Вы можете опускать
этот параметр в команде LOAD.
Выражение CODE 16384,6912 можно заменить на SCREENS :
SAVE «Picture»SCREEN$ и затем
LOAD «Picture»SCREEN$
Это тот случай, когда VERIFY не работает. В остальных случаях VERIFY
можно использовать везде, где используется SAVE.
В ЗАКЛЮЧЕНИЕ.
Везде, где указывается имя файла на ленте, используются только пер-
вые десять символов. Существуют четыре типа информации, которые могут
быть записаны на ленту:
• — программы и переменные (совместно);
Когда команды VERIFY, LOAD и MERfcE осуществляют поиск данных на
ленте, они выводят на экран все считанные ими с ленты имена с указанием
типа данных в виде:
«Program:»
«Number array:»
«Character array:»
«Bytes:»
Если имя — пустая строка, эти команды берут первый встретившийся
файл с указанным типом.
Команда SAVE служит для записи информации на ленту под заданным
именем. Сообщение оо ошибке «F. » выдаётся, если вместо имени указана
пустая строка или число символов в имени 11 и более.
SAVE всегда выдаёт сообщение:
«Start tape, then press any key» (запусти магнитофон и нажми любую
клавишу)
и ждёт нажатия, после чего записывает данные на ленту.
1. Программа и переменные.
SAVE «name» LINE number
записывает программу на ленту таким образом, что последующая коман-
да LOAD автоматически вставляет в программу
GO ТО LINE number
и начинает её выполнять.
SAVE «name» CODE start, lenght
записывает на ленту lenght байт, начиная с адреса start.
SAVE «name» CODE 16384,6912
и записывает один телевизионный экран.
SAVE «name» DATA letterO или
SAVE «name» DATA letter$()
записывают числовой или строковый массив (требование S не относится
к «name»).
Команда VERIFY проверяет (сравнивает) информацию в памяти и на лен-
те. Может выдавать сообщение «R Таре loading error. «.
1. Программа и переменные.
VERIFY «name-
VERIFY «name» CODE start,lenght
Если данных в файле «name» более, чем указано в lenght, то выдаётся
сообщение об ошибке «R. «.
VERIFY «name» CODE start
Здесь осуществляется сравнение байтов в файле «name» с данными в
памяти, начиная с адреса start.
VERIFY «name» CODE
этот оператор осуществляет сравнение данных на ленте с данными в
памяти, начиная с адреса, с которого записывался на ленту первый байт дан-
ных.
VERIFY «name»SCREEN$
или эквивалентно
VERIFY «name» CODE 16384,6912
однако, это будет проверка уже проверенного файла.
VERIFY «name» DATA letterO
VERIFY «name» DATA letter$()
Команда LOAD загружает новые данные с ленты, стирая старые данные
в памяти.
1. Программа и переменные.
Может выдавать сообщение «4 Out of memory . «, если нет места для
новой программы. В этом случае старая программа не уничтожается.
LOAD «name» CODE start,lenght
Если данных в файле «name» больше, чем указанно в lenght, то выдаётся
сообщение «R . «.
LOAD «name» CODE start
Производит загрузку данных из «name» в память, начиная с адреса start.
LOAD «name» CODE
Загружает данные по адресу, с которого записывались данные на ленту
в файл «name».
LOAD «name» DATA letterO
LOAD «name» DATA letter$()
Уничтожает в памяти массив с именем letter или letterS, формирует но-
вый массив и переписывает туда данные из файла «name». Может выдать со-
общение «4 Out of memory . » при нехватке памяти под массив. В этом
случае старый массив не уничтожается.
Команда MERGE загружает новые данные с ленты, не уничтожая старые.
1. Программа и переменные.
Дописывает программу «name» к некоторой программе, находящейся в
памяти. Может выдать сообщение «4 Out of memory
Пример: Записать на ленту информацию о 21-м определённом пользо-
вателем символе и затем сравнить файл на ленте с файлом в памяти.
SAVE «ChessXODE USR «А»,2И8
VERIFY «ChessXODE
Обратная загрузка (с ленты в компьютер)
LOAD «ChessXODE
Источник
Zx Spectrum Loading Error
We have collected for you the most relevant information on Zx Spectrum Loading Error, as well as possible solutions to this problem. Take a look at the links provided and find the solution that works. Other people have encountered Zx Spectrum Loading Error before you, so use the ready-made solutions.
R Tape loading error — Shredzone
- https://shred.zone/cilla/page/440/r-tape-loading-error.html
- So when the ZX Spectrum loads a file from tape, it first waits for the 806 Hz leader signal. If it was detected for at least 317 ms, it waits for the sync pulses, then it starts reading the bit sequence until there is a timeout while waiting for the next pulse. It is a very simple way to store data on tape. And still, it is surprisingly reliable.
«ZX Spectrum Loading Error» T-shirt by PlopCulture Redbubble
- https://www.redbubble.com/i/t-shirt/ZX-Spectrum-Loading-Error-by-PlopCulture/24874235.M4A2N
- Buy ‘ZX Spectrum Loading Error’ by PlopCulture as a Essential T-Shirt. Features. Just your everyday smooth, comfy tee, a wardrobe staple; Slim fit, so size up if …4.7/5(641)
R Tape loading error, Part 2 — Shredzone
- https://shred.zone/cilla/page/441/r-tape-loading-error-part-2.html
- A screenshot is actually just a memory dump that starts at address $4000 (which is the starting address of the screen buffer) and is exactly 6912 bytes long (the ZX Spectrum has a resolution of 256×192 monochrome pixels plus 32×24 bytes color attributes, giving a screen buffer size of 6912 bytes).
LR-Fuse won’t load ZX Spectrum ROMS — RetroPie Forum
- https://retropie.org.uk/forum/topic/13681/lr-fuse-won-t-load-zx-spectrum-roms
- Hi. Apologies before I start — I’m completely new to this forum and I’m only 12 — I’m writing this with my dad next to me — so I’m not sure if I’m posting in the right area. I’m also completely new to retro pie. I’ve successfully used some of the emulators but I’m having real problems with LR Fuse — the ZX Spectrum …
R Tape loading error Avaragado’s blog
- https://avaragado.org/tag/r-tape-loading-error/
- It was, of course, the ZX Spectrum. With high-resolution 256 x 192 pixel, 15-colour graphics, 16K or 48K RAM and a 3.5MHz Z80A processor, it was a substantial step up from its predecessor. A bit more expensive too: £125 for 16K and £175 for 48K.
Funky ZX Spectrum loading sound — YouTube
- https://www.youtube.com/watch?v=W4umA3_9YNs
- Oct 30, 2013 · Music to my ears. Sinclair ZX Spectrum +3Author: SpecBAS Stuff
Retro Isle — Sinclair ZX Spectrum- How to Get it Running!
- http://www.retroisle.com/sinclair/zxspectrum/howtouse.php
- The ZX Spectrum stores programs on tape (audio cassette). Later models also allowed the use of 3″ floppy disks. But most games and other programs for the ZX Spectrum were sold on tape. From your cassette recorder (assuming you still have one), connect it to the computer’s EAR socket on the back — this is used to play tapes «into» the Spectrum.
ZX Spectrum — Wikipedia
- https://en.wikipedia.org/wiki/Spectrum_%2B2b
- The ZX Spectrum (UK: / z Й› d Й› k s /) is an 8-bit personal home computer released in the United Kingdom in 1982 by Sinclair Research.. Referred to during development as the ZX81 Colour and ZX82, it was launched as the ZX Spectrum by Sinclair to highlight the machine’s colour display, compared with the black and white display of its predecessor, the ZX81. The Spectrum was released as eight .
Zx Spectrum Loading Error Fixes & Solutions
We are confident that the above descriptions of Zx Spectrum Loading Error and how to fix it will be useful to you. If you have another solution to Zx Spectrum Loading Error or some notes on the existing ways to solve it, then please drop us an email.
Источник
No Boot or Start-up.
Spectrum powers up but will not display Sinclair copyright message.
There are a number of different ways a ZX Spectrum can fail to boot, some are more difficult to diagnose than others. Here are some of the most common ones.
Black Screen. No key clicks, no image on the screen at all. The computer looks like it hasnt even been switched on.
- Check the Spectrums PSU. Using a multimeter, check that there is about 13.5v DC on the output of the power supply. Remember that the inner connection is the negative and the outer barrel is the posative.
- Check that the Barrel Connector that the PSU connects to on the PCB of the Spectrum has not corroded and does not have any fractured solder joints. Make sure the connector is fully solder to the PCB properly.
- Measure the output of the 7805 regulator with a multimeter. Make sure you see 5 volts on the output. This 7805 regulator will be dead if an incorrect power supply has been used at any point.
Display is just random lines with a black border
- Incorrect voltages to the lower RAM chips . Check transistors TR4 and TR5. If these transistors are dead they will read a short on the centre pins.
- Check that the DC-DC circuit is providing the correct voltages to the lower RAM chips.
- Try swapping out the ULA.
- Try replacing all of the lower RAM chips.
Screen displays thick white/black bands with Random coloured pixels
- This could be a fault with of one or more lower RAM (4116) chips. This may have been caused by a short to the edge connector or a problem with the dc-dc converter. —– Check the input voltages on the 4116 chips. Make sure there is -5V on pin 1, 12v on pin 8 and 5v on pin 9. ground is pin 16. If either the -5v or 12v is more than 1v out, then check TR4/5 and the diodes in the circuit.
- IF any of the voltages are still incorrect after swapping out TR4 or TR5 it maybe that one of the 4116 chips has failed. So replace them in turn until the voltages return normal again.
- If you have thin (pixel) vertical lines on screen, you can use them to infer which chip is bad by the offset from the left side of each attribute block. A line at the left side corresponds to bit 7 (IC13 on issue 2 and above boards) and each pixel to the right corresponds to the next chip along – to bit 0 (IC6). Another crude method of detecting bad chips is to piggyback a known working chip over the top of each just hold it in place, power on and see if the problem goes away or at least changes.
- If the Spectrum still will not boot with good lower RAM then IC3/4 could be dead or it could be transistor TR3, CPU, the ROM or a bad upper RAM chip!
Upper RAM faults:
Boots but crashes when playing games etc.
- If the Spectrum is 48K, an upper RAM chip IC15-IC22 is probably faulty. The upper RAM can be disabled to check if the computer then works OK as a 16K machine. If it does, you can re-enable the upper RAM and attempt to fault find it with BASIC’s POKE and PEEK commands.
Keyboard faults:
A single key, columns, rows or the entire keyboard does not respond.
- If the keyboard membrane is an original one just replace it.
- Check that the membrane tails are not pressing against the TV modulator shell as this causes a capacitance issue. (Use tape to cover the modulator if so.)
- Replace the membrane sockets on the PCB
Behaves as if a key is stuck.
- Check ULA
- Check keyboard membrane
- Check membrane sockets for contamination
- Check RAM
- Check diodes D1-D8
- Check ROM
Sound faults:
No sound.
- Check the speaker impedance (should be 200 Ohms for Issue 2 PCB and 40 Ohms for issue 3 PCB onwards)
- Check TR7 (ZTX450) and D9 on issue 3 boards onwards
- Swap ULA
Border changes colour when sound plays
- Faulty ULA
Loading issues:
Tape loading errors.
- Make sure your source is loud enough (mp3 players and modern devices often are not). Note: Having visible loading bands in the border is no guarantee of success.
- Clean the EAR socket, if plug is loose when inserted, replace it.
- Use a MONO 3.5mm cable (not stereo).
- There is a lot more detail about tape loading issues here
“Cosmetic” video issues
Note: I recommend that Spectrums should be re-capped (ie: have their electrolytic capacitors replaced with new ones) as a matter of course. This can improve the video quality a lot.
Symptom: Yellow screen / Black and White picture on Issue 2 board.
- Adjust the trimmers TR1 and TR2. If the trimmers are grotty, replace them. If no amount of tweaking will get a stable, white background the ULA has degraded. If the picture stays black and white no matter what, try adjusting TC2 (note its original position so it can be returned there if no joy).
- Swap the ULA
- Replace the LM1889 (IC14)
Symptom: Poor picture on PCB issue 3 and above, even if re-capped and composite modded.
- Unless you know that other Spectrum 16/48s work with your TV, try another TV (modern LCDs can be twitchy with the Spectrum’s slightly non-standard output).
- Replace the LM1889 (IC14) (A LM1889 can directly replace a TI SN94459 if present).
- Replace TR1/TR2
Symptom: No / dark picture but Spectrum seems to work otherwise, EG: clicks can be heard when pressing keys.
- Try Spectrum with another TV.
- If composite modded via a transistor, do the capacitor mod instead.
- Replace TR1/TR2.
Symptom: Black and white picture (issue 3 and above)
- Check the 12V supply voltage to the LM1889 pin 14 (if way off check TR4/5)
- Replace the LM1889
- Replace the 4.33MHz XTAL (very rare that this is faulty)
Symptom: Waving pixels (“dot crawl”)
- This is normal on Spectrums (because the pixel clock is not synchronized with the colour timing). On issue2 boards adjusting TC1 may help a little.
Symptom: Entire screen jumps up and down randomly by one scanline
- This is normal. The Spectrum’s video output is non-standard and some TVs handle it better than others. My own CRT exhibits this behaviour when it first receives a signal but it settles down after about a minute.
Symptom: Display shows recognizable characters but their positions/colours are scrambled.
- Likely IC3 or IC4 is bad
- Swap ULA
Symptom: Poor picture using the standard RF output (aerial cable)
- Re-cap the Spectrum, try another known-good cable (surprisingly, they do seem to
degrade) - Replace the modulator
- Admit defeat and do the Composite Video mod 🙂
Issues when using expansion devices:
Symptom: Crashing, odd effects that don’t occur when not connected.
- Clean the edge connector (ideally dismantle the Spectrum and clean the edge connector with the blue end of a pencil eraser – don’t press so hard as to remove the tinning). Clean up with isopropyl alcohol on cotton buds or kitchen towel.
- Replace the Z80 CPU (especially if the issue is with DivMMC interface)
- Replace the ROM.
Misc Issues:
Symptom: Random crashes after being on for a while.
- Likely to a faulty ULA since this chip runs the hottest.. but it could be any other part. Swap the ULA – if still bad, diagnostics software is required.
- If random pixels appear on screen, it’s probably a subtle lower RAM fault.
Recent Posts
How many Commodore Amiga games are there?
The Commodore Amiga is a classic and iconic home computer that was first introduced in 1985. It was known for its powerful hardware and advanced graphics capabilities, which made it a popular choice…
Владею «родным» 48к спектрумом с резиновой клавой. Как раз недавно закончил процесс восстановления. Осталось попробовать железку «в деле». Страшно угнетала возня с загрузкой с ленты, ибо DivIDE или подобными девайсами пока что не владею, да и вкладывать миллионы пока не готов, а ждать по 10 минут или около для дозагрузки — то еще удовольствие.
Медитация с гуглом вывела на некую технологию ускорения записи, насколько я понимаю, без изменения программного кода. Вот, собственно ссылка.
Для начала откопался сайт некого фаната из забугорья, который уже выкладывал готовые WAVы, так что переключаться из макоси в Windows не пришлось (ну или там виртуалку стартовать). Выбор пал на Exolon, сами знаете почему.
Что может быть проще ? Берем mp3 плеер (в данном случае — древний iPod Nano), заливаем WAV. Слушаем в наушниках — пищит.
Подключаем кабелем от каких-то колонок к спектруму — давим LOAD «» — ноль реакции.
Здесь стоит отметить, что «родные» аппараты грузились не с линейного выхода магнитофона, как наши клоны, а прямо с гнезда наушников, при этом громкость надо было выставлять на максимум. Помнится с другом пугали соседей, когда возникала ошибка и провод вытаскивался из гнезда наушников «чисто поржать» — квартира наполнялась этими жуткими звуками, такими дорогими сердцу любого
перееханного спектрумом
спектрумиста.
Вернемся к процессу. Как можно догадаться, подъем громкости не вызвал никакой реакции. Полосочки не побежали, экран белый. И тут я начал лихорадочно вспоминать, что во время очередного приступа ностальгии я уже изучал вопрос, как подобное грузить и попадал на сайт какого-то деятеля, который как-то оптимизировал WAV в аудиоредакторе, дабы он нормально читался.
Перспективка ставить редактор еще более угнетала, да и страничку я не нашел.
Решение, как обычно, лежало на поверхности. В ZX-Spectrum 48k звук подается через моно разъем, который, как сообщает википедия, не то, чтобы очень сильно совместим с его стерео-наследником. Дело в том, что второй канал (центральная часть) при втыкании в моно разъем точнехонько попадает на землю. В результате если «не повезло» — КЗ и «3.14зда рулю», то есть плееру, а если повезло, то тупо ничего не слышно или слышно с искажениями.
3 минуты возни с паяльником и переходник готов.
3.5 mm jack female->3.5 mm jack male.
На «маме» подпаиваемся к «кончику» и земле. Второй канал не запаиваем. На «папе», опять-таки к кончику, а в качестве земли используем второй канал, ибо он как раз «ляжет» на землю. Землю на «папе» не используем!
И… заработало! На фото сверху айпод, подключенный кабелем в переходник, а переходник к Speccy.
Правда, пришлось поиграть с настройками эквалайзера. Вообще, рекомендуют ставить эквалайзер в off, но у меня это вызывало стабильный tape loading error. Лучшие результаты дал пресет «маленькие динамики».
Exolon загружен за 21 секунду. DivIDE нервно курит в сторонке. Ибо незачем.
Такие мытарства с переходниками не грозят владельцам наших клонов или более старших спектрумов — ибо там правит бал DIN-разъем, где все «по человечески».
Ну а дальше план такой:
- Во-первых попробовать сконвертировать какой-нибудь TZX самостоятельно, желательно с дозагрузками.
- Во-вторых, добыть «выделенный» плеер от какого-нибудь известного производителя типа Pawasonic или SANY, ну или какой другой Abibas.
- А третий этап — вскрыть его и попробовать заменить микрофон (сейчас диктофон ставят в плееры все) на разъем и попробовать сделать тупо Savegame в Elite. Может сработает ?
А если среди читателей есть владельцы наших клонов, поделитесь подобным опытом. Как «ускорялись», как конвертировали, что вышло. TR-DOS не интересен, ибо не ТРУъ. С TR-DOS каждый дурак может
I use a Sinclair ZX Spectrum Issue 2 with a DivMMC EnJOY! Pro One
and the boot process shows no error and I’m even able to enter the
file browser but if I choose any game/demo/program I get always garbage:
YouTube Link: https://www.youtube.com/watch?v=9bGBzDCBbKk
Here my CPU (NEC D780C-1) with modification:
https://i.imgur.com/eoDEX7N.jpg
Any idea what’s wrong here?
Thx
hippietrail
5,8211 gold badge17 silver badges49 bronze badges
asked Apr 7, 2019 at 17:28
Does your divmmc work in another machine?
Anyway, there is a single common problem in 48k spectrums: on the edge connector, +12v and /M1 signals are neighbouring. When some device is inserted too much unaligned, chances are that +12v would shortcircuit to /M1.
Since 48k «chipset» does not use /M1, with enough luck this could pass unnoticed to the user — the machine still works, but /M1 output is burned out. And DivMMC needs /M1 anyway.
The only way to fix that is to replace Z80.
answered Apr 7, 2019 at 21:08
lvdlvd
9,65622 silver badges59 bronze badges
6
So the real issue was a problem with memory!
based on the ZX Spectrum Service Manual
I did a RAM test:
Execute the command PRINT PEEK 23732+PEEK 23733*256
and the result should
be 65535
! (for a 48k machine)
I got 49344
-> error in 49345
: (shows always the last working address)
- key in:
POKE 49345,85: PRINT PEEK 49345 (=A)
- key in:
POKE 49345,170: PRINT PEEK 49345 (=B)
If answer A is anything other than 85 or answer B other than 170 look into
this table to find the faulty RAM IC: (mine was IC16)
So I have replaced the faulty IC16 and now I’m able to work with DivMMC!
answered Apr 12, 2019 at 14:08
leon22leon22
1594 bronze badges
ГЛАВА 20
ВНЕШНЯЯ ПАМЯТЬ НА МАГНИТНОЙ ЛЕНТЕ
Краткое содержание: LOAD, SAVE, VERIFY, MERGE
Основные команды работы с магнитофоном LOAD, SAVE и VERIFY уже
рассматривались во вводном описании. Вы могли видеть, что LOAD затирает
старую программу в памяти компьютера при загрузке новой программы с
ленты. Есть другая команда MERGE, не делающая этого. Эта команда стирает
лишь те строки старой программы или переменные, которые совпадают с но-
мерами строк новой программы или именами новых переменных.
Программу «DICE» («Игральная кость») из главы 11 запишем на ленту
под именем «DICE». А теперь введём и выполним следующую программу:
1 PRINT 1
2 PRINT 2
10 PRINT 10
20 LET X=20
А затем осуществим её проверку, заменив команду VERIFY «DICE» на
команду MERGE «DICE». Вы увидите, что строки 1и 2 сохраняются, а строки
10 и 20 заменяются на строки с этими номерами из программы «DICE»,
переменная X тоже сохраняется (проверьте — PRINT X).
Теперь Вы знаете четыре оператора для работы с кассетным магнитофо-
ном:
SAVE — записывает программу и переменные на магнитофон;
VERIFY — проверяет программу и переменные в памяти компьютера по
их копии на ленте;
LOAD — очищает память компьютера от всех программ и загружает в неё
новые, считанные с магнитофона;
MERGE — подобна LOAD, только не очищает всю память, а лишь заменя-
ет те строки программы или переменные, у которых совпадают номера или
имена с такими же на магнитной ленте.
За каждой из этих команд следует ключевое слово — имя программы,
определённое первоначально в команде SAVE. Пока компьютер ищет указан-
ную программу, он выводит имена всех программ, уже прочитанных с ленты.
Имеются две возможности для загрузки и запуска программ с ленты;
• Вариант 1. В операторах LOAD, VERIFY и MERGE вместо имени
можно указать пустую строку. Тогда будет взят первый
встретившийся файл и затем выполнить команду RUN.
• Вариант 2. С использованием оператора SAVE
SAVE «string» LINE number
Программа запишется на ленту так, что когда она будет вновь считана
по команде LOAD (но не MERGE), она автоматически установится на строку
с указанным номером и сама инициирует своё выполнение.
Кроме текстов программ на ленту можно записывать также массивы или
данные.
Записать на ленту массив Вы можете, используя команду SAVE с DATA
таким образом:
SAVE «string» DATA array name О
Здесь «string» — т/1мя, присваиваемое файлу данных, которое может
состоять из букв или букв и символа «$» (перечёркнутая буква S). Для строко-
вых данных^это требование здесь не важно.
Загружаются такие данные по команде:
LOAD «string» DATA array nameO
нельзя использовать оператор MERGE.
Если загружается строковый массив, то после обнаружения его ма лен-
те, компьютер выдаёт: «Character array:» и далее имя этого массива.
Существует возможность записи на магнитную ленту и отдельных бай-
тов информации. Так, например, это может быть телевизионная картинка или
определяемые пользователем графические символы и т д. Для этого исполь-
зуется ключевое слово CODE.
Например:
SAVE «Picture» CODE 16384,6912
LOAD «Picture» CODE
после CODE можно указать числа:
LOAD «Picture» CODE start, lenght
lenght — (длина) определяет сколько данных (в байтах) надо загрузить с
ленты. Если длина больше, чем записано на ленту, то выдаётся сообщение «R
Таре loading error …» (ошибка загрузки с ленты). Этот параметр можно
опустить, и тогда компьютер считает все данные, которые записаны на ленте.
start — (начало) указывает адрес, с которого должны загружаться данные
и может быть отличным от адреса, указанного в SAVE Вы можете опускать
этот параметр в команде LOAD.
Выражение CODE 16384,6912 можно заменить на SCREENS :
SAVE «Picture»SCREEN$ и затем
LOAD «Picture»SCREEN$
Это тот случай, когда VERIFY не работает. В остальных случаях VERIFY
можно использовать везде, где используется SAVE.
В ЗАКЛЮЧЕНИЕ.
Везде, где указывается имя файла на ленте, используются только пер-
вые десять символов. Существуют четыре типа информации, которые могут
быть записаны на ленту:
• — программы и переменные (совместно);
• -числовые массивы;
• — строковые массивы;
• — непосредственно байту.
Когда команды VERIFY, LOAD и MERfcE осуществляют поиск данных на
ленте, они выводят на экран все считанные ими с ленты имена с указанием
типа данных в виде:
«Program:»
«Number array:»
«Character array:»
«Bytes:»
Если имя — пустая строка, эти команды берут первый встретившийся
файл с указанным типом.
Команда SAVE служит для записи информации на ленту под заданным
именем. Сообщение оо ошибке «F…» выдаётся, если вместо имени указана
пустая строка или число символов в имени 11 и более.
SAVE всегда выдаёт сообщение:
«Start tape, then press any key» (запусти магнитофон и нажми любую
клавишу)
и ждёт нажатия, после чего записывает данные на ленту.
1. Программа и переменные.
SAVE «name» LINE number
записывает программу на ленту таким образом, что последующая коман-
да LOAD автоматически вставляет в программу
GO ТО LINE number
и начинает её выполнять.
2. Байты.
SAVE «name» CODE start, lenght
записывает на ленту lenght байт, начиная с адреса start.
SAVE «name»SCREEN$
эквивалентно
SAVE «name» CODE 16384,6912
и записывает один телевизионный экран.
3. Массивы.
SAVE «name» DATA letterO или
SAVE «name» DATA letter$()
записывают числовой или строковый массив (требование S не относится
к «name»).
Команда VERIFY проверяет (сравнивает) информацию в памяти и на лен-
те. Может выдавать сообщение «R Таре loading error…».
1. Программа и переменные.
VERIFY «name-
2. Байты.
VERIFY «name» CODE start,lenght
Если данных в файле «name» более, чем указано в lenght, то выдаётся
сообщение об ошибке «R…».
VERIFY «name» CODE start
Здесь осуществляется сравнение байтов в файле «name» с данными в
памяти, начиная с адреса start.
VERIFY «name» CODE
этот оператор осуществляет сравнение данных на ленте с данными в
памяти, начиная с адреса, с которого записывался на ленту первый байт дан-
ных.
VERIFY «name»SCREEN$
или эквивалентно
VERIFY «name» CODE 16384,6912
однако, это будет проверка уже проверенного файла.
3. Массивы.
VERIFY «name» DATA letterO
VERIFY «name» DATA letter$()
Команда LOAD загружает новые данные с ленты, стирая старые данные
в памяти.
1. Программа и переменные.
LOAD «name»
Может выдавать сообщение «4 Out of memory …», если нет места для
новой программы. В этом случае старая программа не уничтожается.
2. Байты.
LOAD «name» CODE start,lenght
Если данных в файле «name» больше, чем указанно в lenght, то выдаётся
сообщение «R …».
LOAD «name» CODE start
Производит загрузку данных из «name» в память, начиная с адреса start.
LOAD «name» CODE
Загружает данные по адресу, с которого записывались данные на ленту
в файл «name».
3. Массивы.
LOAD «name» DATA letterO
или
LOAD «name» DATA letter$()
Уничтожает в памяти массив с именем letter или letterS, формирует но-
вый массив и переписывает туда данные из файла «name». Может выдать со-
общение «4 Out of memory …» при нехватке памяти под массив. В этом
случае старый массив не уничтожается.
Команда MERGE загружает новые данные с ленты, не уничтожая старые.
1. Программа и переменные.
MERGE «name»
Дописывает программу «name» к некоторой программе, находящейся в
памяти. Может выдать сообщение «4 Out of memory
2. Байты.
Не поддерживается.
3. Массивы.
Не поддерживается.
Пример: Записать на ленту информацию о 21-м определённом пользо-
вателем символе и затем сравнить файл на ленте с файлом в памяти.
SAVE «ChessXODE USR «А»,2И8
VERIFY «ChessXODE
Обратная загрузка (с ленты в компьютер)
LOAD «ChessXODE
или
LOAD «ChessXODEUSR «A» .
In the early time of home computers, at the beginning of the 1980’s, hard disks and even floppy disks were too expensive for home use. The cheapest way for storing large amounts of data was the cassette tape. Cassettes and tape recorders were affordable and available in almost any household.
In this blog article, I’m going to explain how the Sinclair ZX Spectrum stored programs on cassette tapes. Other home computers of that time, like the Commodore 64 or Amstrad CPC, worked in a similar fashion.
Cassette tapes were designed to store audio signals like voice or music, so the inventors of the home computers had to find a way to convert data to audio signals. The easiest way is to serialize the data to a bit stream of 1’s and 0’s, and generate a long rectangular wave cycle for «1» and a short rectangular wave cycle for «0». This is what the ZX Spectrum actually does!
A short wave cycle is generated by giving power to the audio output for 855 so called T-states, and then turning off the power for another 855 T-states. A «T-state» is the time of a single clock pulse of the Z80-A CPU. As the CPU of a classic ZX Spectrum is clocked with 3.5 MHz, a T-state has a duration of 286 ns. The duration of a short wave cycle is thus 489 µs, giving an audio frequency of about 2,045 Hz. The long wave cycle is just twice as long.
Due to all kind of filters in the analog audio path, the rectangular signal is smoothed to a sinusoidal signal when played back. A Schmitt trigger inside the ZX Spectrum’s hardware converts the audio signal back to a rectangular shape. Since the audio signal can have different amplitudes or could even be inverted, the hardware only cares for signal edges, not for levels. All that the loader routine now has to do is to measure the duration of the pulses, regenerate the bit stream, and put the bytes back together.
If you think that things cannot be that easy, you are right. 😄 The most difficult part for the loader is to find the start of the bit stream. If it is off by only one cycle (or even just a pulse), all the bytes are shifted by one bit, and the result is useless. All kind of noise on the tape makes it impossible to just wait for the signal to start, though.
For this reason, the recording starts with a leader signal, followed by a sync wave cycle, followed by the bit stream itself. The leader signal is just a continuous wave with a pulse length of 2,168 T-states, giving an 806 Hz tone that is displayed by red and cyan border colors on the TV. The sync wave cycle is a pulse of 667 T-States «on», followed by 735 T-states «off». After that, the actual data stream begins, which is displayed in blue and yellow border colors. When the last bit was transmitted, the data stream just ends.
So when the ZX Spectrum loads a file from tape, it first waits for the 806 Hz leader signal. If it was detected for at least 317 ms, it waits for the sync pulses, then it starts reading the bit sequence until there is a timeout while waiting for the next pulse.
It is a very simple way to store data on tape. And still, it is surprisingly reliable. After 30 years, I could recover almost all files from my old cassette tapes. Some of them were of the cheapest brands I could get my hands on back in 1987.
The only disadvantage is that this method is very slow. With 489 µs for a «0» and 978 µs for a «1», saving just 48 KBytes of data can take up to 6 minutes, giving an average bit rate of 1,363 bps (yes, bits per second). If we were to save a single 3 MBytes mp3 file that way, it would take almost 5 hours (and 5 cassettes with 60 minutes recording time each).
Some commercial games used speed loaders and copy protections. Speed loaders just reduced the number of T-states for the pulses, which increased the bit rate. Some copy protections used a «clicking» leader tone, where the leader signal was interrupted before the minimal detection time of 317 ms was reached. The original loader routine could not synchronize to these kind of signals, so it was impossible to read those files into copy programs. Those protection measures could still be circumvented by copying directly from tape to tape, but this only worked a few times due to increasing audio noise.
In the next article, I will take a deeper look at the bit stream contents, and I will also explain where the dreaded «R Tape loading error» comes from.