Просмотр полной версии : Хочу написать кассетный загрузчик похожий на Alkatraz но не совсем!!! Прикольнее!!
alex8418
27.07.2019, 23:24
Хочу написать кассетный загрузчик похожий на Alkatraz но не совсем!!! Чтобы картинка грузилась как в игре Bobby Bearing защита Алькатраз, не обязательно чтобы была во время загрузки бегущая строка!!! Чтобы после загрузки картинки возникал счётчик похожий на Newson Slowload такой как в игре Cybernoid и полосы возникали вместе с счётчиком такого цвета как в игре Kentucky Racing!!! Помогите с написанием программы в GENS-е!!!???!!! Игры взяты с сайта http://www.worldofspectrum.org!!!
объяснять долго. ищи статьи в журналах ZXreview.
там была и заствка рисующаяся квадратиком (сам кодируешь проявление экрана) и разноцветные полосы и много всего другого.
alex8418
28.07.2019, 00:33
объяснять долго. ищи статьи в журналах ZXreview.
там была и заствка рисующаяся квадратиком (сам кодируешь проявление экрана) и разноцветные полосы и много всего другого.
Да набирал я все загрузчики Zxreview в GENS-е! Но есть те которые со строчками написаны, в чём их набирать не знаю между прочим??? Вы заметьте почему спросил и указал игру BobbyBearing потому что там отрисовка идёт сначала полосками, потом рисуют четыре квадрата одновременно и всё происходит в цвете, так как атрибуты цвета загружаются в загрузчике - вот в чём фокус, в журнале такого нет!!! Да про изменение полос не про все понятно как делать??? А про квадрат в крайнем углу и вовсе неясно, что говорить про счётчик???
Объект для взлома игра Island of Dr. Destructo, The, так в TR-DOS перевести мне её не удалось, а переделать загрузчик хочется и не только её!!!
alex8418
Посмотри еще на wos Ranarama, Technician Ted, Technician Ted: The Megamix, Blood Brothers, Deflektor, Final Matrix, Costa Capers, Moon Strike, Heavy on the Magick, City Slicker, Maze The, Zynaps, Defender of the crown. А еще на старом ftp wos были загрузчики ramsoft с индикацией загрузки в виде полоски.
alex8418
28.07.2019, 00:58
alex8418
Посмотри еще на wos Ranarama, Technician Ted, Technician Ted: The Megamix, Blood Brothers, Deflektor, Final Matrix, Costa Capers, Moon Strike, Heavy on the Magick, City Slicker, Maze The, Zynaps, Defender of the crown. А еще на старом ftp wos были загрузчики ramsoft с индикацией загрузки в виде полоски.
Вы не совсем меня поняли я имел ввиду, как написать этот загрузчик в GENS-е??? Свой загрузчик, для любой игры, который любой желающий на форуме сможет писать для любой понравившейся ему игры!!!
А почему именно в Gens а не в чем-то другом ? Остается дизасмить и разбираться как оно сделано.
А на старушек еще не тянет, не?
любой желающий на форуме сможет писать для любой понравившейся ему игры!!!
а если файл игры накладывается на область где работает загрузчик ???
- - - Добавлено - - -
Вы заметьте почему спросил и указал игру BobbyBearing потому что там отрисовка идёт сначала полосками, потом рисуют четыре квадрата одновременно и всё происходит в цвете, так как атрибуты цвета загружаются в загрузчике - вот в чём фокус, в журнале такого нет!!!
для этого тоже есть спец.утилита.
пользователь сам выбирает как проявляется экран.
загрузчик на основе его выбора строит карту адресов и выводит загружаемые байты в нужном порядке.
alex8418
28.07.2019, 11:27
а если файл игры накладывается на область где работает загрузчик ???
- - - Добавлено - - -
для этого тоже есть спец.утилита.
пользователь сам выбирает как проявляется экран.
загрузчик на основе его выбора строит карту адресов и выводит загружаемые байты в нужном порядке.
Вот с этого момента по подробнее, что за утилита, как называется? В журнале ZXreview далеко не всё понятно, если только не являешься спектрумистом, который уже давно занимается ассеблированием, дизассемблированием! Я к такой категории не отношусь!
Хотел увидеть в данной теме конкретные примеры!
что за утилита, как называется?
http://www.worldofspectrum.org/infoseekid.cgi?id=0024194
Bedazzle
29.07.2019, 14:53
alex8418
Посмотри еще на ... Heavy on the Magick,
В ней искаропки :) есть обе процедуры
turbo_loader: ; #B7EE
turbo_saver: ; #BACD
...
#BB85
достать можно сразу после загрузки игры. После запуска в это место пишется буфер экрана, так что место затирается.
alex8418
30.07.2019, 02:21
http://www.worldofspectrum.org/infoseekid.cgi?id=0024194
Спасибо goodboy, но Вы понимаете, что это не СОВСЕМ то что Я спрашивал? Тема счётчика вообще заглохла!!! Вот текст этой программы в упрощенном виде:
10 PAPER 0: INK 7: BORDER 0: CLEAR 39999
20 LET a=22528: LET b=55000
30 LOAD "" SCREEN$
40 LET a$=INKEY$
50 LET a=a-(a$="6" AND a>22528)+(a$="7" AND a<23295)-32*(a$="9" AND a>22559)+32*(a$="8" AND a< 23264)
60 LET at=PEEK a: POKE a,0: PAUSE 5: POKE a,127: PAUSE 5: POKE a,at
70 IF a$="0" THEN GO TO 200
80 IF a$=" " THEN LET b=b-11: POKE a,at: BEEP 1,0
90 IF a$="1" THEN GO TO 300
100 GO TO 40
200 BEEP .1,30: LET ad=a-2 5 60-17 92*(a<2 3040)-1792*(a<22784)
210 LET ah=INT (ad/256): LET al=ad-256*ah
220 POKE b,al: POKE (b+l),ah
230 FOR n=0 TO 7: POKE (b+n+2), PEEK (ad+256*n): NEXT n
240 POKE b+10,at: LET b=b+11: LET at=at
250 POKE a,0: GO TO 40
300 INPUT "Filename : ";a$
310 SAVE a$ CODE 55000, (b-55000)
Назначение переменных в программе:
а - адрес атрибута текущего знакоместа;
b - первый свободный адрес создаваемого файла;
at - значение атрибута текущего знакоместа;
ad - адрес первой линии текущего знакоместа;
al, ah - младший и старший байты адреса верхней пиксельной линии знакоместа;
atl - значение атрибута текущего знакоместа для временного хранения.
Текст взят http://zxpress.ru/book_articles.php?id=481 из журнала ZX-Ревю 1994 №6 статья Нестандартные загрузчики!
Спасибо goodboy, но Вы понимаете, что это не СОВСЕМ то что Я спрашивал?
действительно, какая-то дичь, а я поверил названию и посоветовал не проверив функционал.
- - - Добавлено - - -
Тема счётчика вообще заглохла!!
бери готовый код (он в играх от Hewson универсальный)
SoftLight
30.07.2019, 12:22
alex8418, тебе sjasm файл что-ли готовый прислать? Тут (http://zxpress.ru/book_articles.php?id=255) все есть про счетчик, и даже работает если набрать.
https://zx-pk.ru/threads/9187-originalnaya-zagruzka-kartinki.html?p=175264&viewfull=1#post175264
Последняя прога в файле под названием ARTBRUSH.
в алькатразе (в отличии от бегающего квадратика) совсем другая логика работы.
в квадратике (при кодировании) адреса сохраняются на ленту, а в алькатразе они уже внутри загрузчика,
там похоже перед загрузкой строится карта на основании заданных участков экрана.
на WoS есть загрузочный комплект/исходники
http://www.worldofspectrum.org/pub/sinclair/screens/in-game/a/AlkatrazDevelopmentCartridges.gif
...
я в своих дисковых версиях делал эмуляцию проявления таких экранов.
вот нашёл/вспомнил для примера
https://vtrd.in/gamez/s/SIDEARMZ.ZIP
alex8418
20.10.2019, 19:36
alex8418, тебе sjasm файл что-ли готовый прислать? Тут (http://zxpress.ru/book_articles.php?id=255) все есть про счетчик, и даже работает если набрать.
Пытался я уже из ZX-Ревю 1995 №1 набирать программу, есть подозрение, что набирать надо не в Gens-е 4-ом, как вводить строки #FE81 и #FEAC в Gens-е не понятно?
Вот набрал в Gens-е 4 программу загрузчика всё из того же журнала ZX-Ревю 1994 №6 статья Нестандартные загрузчики:
10<<SP>><<SP>>ORG<<SP>>40000
20<<SP>>ENT
30<<SP>><<SP>>CALL<<SP>>BEGIN
40<<SP>><<SP>>EI
50<<SP>><<SP>>RET
60<<SP>>BEGIN<<SP>>DI
70<<SP>><<SP>>LD<<SP>>A,#0F
80<<SP>><<SP>>OUT<<SP>>(#FE),A
90<<SP>><<SP>>IN<<SP>>A,(#FE)
100<<SP>><<SP>>RRA
110<<SP>><<SP>>AND<<SP>>#20
120<<SP>><<SP>>OR<<SP>>#02
130<<SP>><<SP>>LD<<SP>>C,A
140<<SP>><<SP>>CP<<SP>>A
150<<SP>>BREAK<<SP>>RET<<SP>>NZ
160<<SP>>START<<SP>>CALL<<SP>>EDGE1
170<<SP>><<SP>>JR<<SP>>NC,BREAK
180<<SP>><<SP>>LD<<SP>>HL,#0415
190<<SP>>WAIT<<SP>>DJNZ<<SP>>WAIT
200<<SP>><<SP>>DEC<<SP>>HL
210<<SP>><<SP>>LD<<SP>>A,H
220<<SP>><<SP>>OR<<SP>>L
230<<SP>><<SP>>JR<<SP>>NZ,WAIT
240<<SP>><<SP>>CALL<<SP>>EDGE2
250<<SP>><<SP>>JR<<SP>>NC,BREAK
260<<SP>>LEADER<<SP>>LD<<SP>>B,#9C
270<<SP>><<SP>>CALL<<SP>>EDGE2
280<<SP>><<SP>>JR<<SP>>NC,BREAK
290<<SP>><<SP>>LD<<SP>>A,#C6
300<<SP>><<SP>>CP<<SP>>B
310<<SP>><<SP>>JR<<SP>>NC,START
320<<SP>><<SP>>INC<<SP>>H
330<<SP>><<SP>>JR<<SP>>NZ,LEADER
340<<SP>>SYNC<<SP>>LD<<SP>>B,#C9
350<<SP>><<SP>>CALL<<SP>>EDGE1
360<<SP>><<SP>>JR<<SP>>NC,BREAK
370<<SP>><<SP>>LD<<SP>>A,B
380<<SP>><<SP>>CP<<SP>>#D4
390<<SP>><<SP>>JR<<SP>>NC,SYNC
400<<SP>><<SP>>CALL<<SP>>EDGE1
410<<SP>><<SP>>RET<<SP>>NC
420<<SP>><<SP>>LD<<SP>>A,C
430<<SP>><<SP>>XOR<<SP>>#03
440<<SP>><<SP>>LD<<SP>>C,A
450<<SP>><<SP>>LD<<SP>>B,#B0
460<<SP>><<SP>>CALL<<SP>>MARKER
470<<SP>>LOOP<<SP>>CALL<<SP>>PLACE
480<<SP>><<SP>>RET<<SP>>NC
490<<SP>><<SP>>JR<<SP>>LOOP
500<<SP>>PLACE<<SP>>LD<<SP>>B,#B0
510<<SP>><<SP>>CALL<<SP>>MARKER
520<<SP>><<SP>>LD<<SP>>L,E
530<<SP>><<SP>>LD<<SP>>B,#B0
540<<SP>><<SP>>CALL<<SP>>MARKER
550<<SP>><<SP>>RET<<SP>>NC
560<<SP>><<SP>>LD<<SP>>H,E
570<<SP>><<SP>>LD<<SP>>D,#08
580<<SP>><<SP>>LD<<SP>>B,#B0
590<<SP>>GRAF<<SP>>CALL<<SP>>MARKER
600<<SP>><<SP>>RET<<SP>>NC
610<<SP>><<SP>>LD<<SP>>(HL),E
620<<SP>><<SP>>INC<<SP>>H
630<<SP>><<SP>>DEC<<SP>>D
640<<SP>><<SP>>LD<<SP>>B,#B1
650<<SP>><<SP>>JR<<SP>>NZ,GRAF
660<<SP>><<SP>>LD<<SP>>A,H
670<<SP>><<SP>>SUB<<SP>>#08
680<<SP>><<SP>>RRA
690<<SP>><<SP>>RRA
700<<SP>><<SP>>RRA
710<<SP>><<SP>>AND<<SP>>#03
720<<SP>><<SP>>OR<<SP>>#58
730<<SP>><<SP>>LD<<SP>>H,A
740<<SP>><<SP>>LD<<SP>>B,#B2
750<<SP>><<SP>>CALL<<SP>>MARKER
760<<SP>><<SP>>LD<<SP>>(HL),E
770<<SP>><<SP>>RET
780<<SP>>MARKER<<SP>>LD<<SP>>E,#01
790<<SP>>LD8BIT<<SP>>CALL<<SP>>EDGE2
800<<SP>><<SP>>RET<<SP>>NC
810<<SP>><<SP>>LD<<SP>>A,#CB
820<<SP>><<SP>>CP<<SP>>B
830<<SP>><<SP>>RL<<SP>>E
840<<SP>><<SP>>LD<<SP>>B,#B0
850<<SP>><<SP>>JR<<SP>>NC,LD8BIT
860<<SP>><<SP>>RET
870<<SP>>EDGE2<<SP>>CALL<<SP>>EDGE1
880<<SP>><<SP>>RET<<SP>>NC
890<<SP>>EDGE1<<SP>>LD<<SP>>A,#16
900<<SP>>DELAY<<SP>>DEC<<SP>>A
910<<SP>><<SP>>JR<<SP>>NZ,DELAY
920<<SP>><<SP>>AND<<SP>>A
930<<SP>>SAMPLE<<SP>>INC<<SP>>B
940<<SP>><<SP>>RET<<SP>>Z
950<<SP>><<SP>>LD<<SP>>A,#7F
960<<SP>><<SP>>IN<<SP>>A,(#FE)
970<<SP>><<SP>>RRA
980<<SP>><<SP>>RET<<SP>>NC
990<<SP>><<SP>>XOR<<SP>>C
1000<<SP>><<SP>>AND<<SP>>#20
1010<<SP>><<SP>>JR<<SP>>Z,SAMPLE
1020<<SP>><<SP>>LD<<SP>>A,C
1030<<SP>><<SP>>CPL
1040<<SP>><<SP>>LD<<SP>>C,A
1050<<SP>><<SP>>AND<<SP>>#07
1060<<SP>><<SP>>OR<<SP>>#08
1070<<SP>><<SP>>OUT<<SP>>(#FE),A
1080<<SP>><<SP>>SCF
1090<<SP>><<SP>>RET
Символом <<SP>> отметил количество пробелов для тех, кто надумает набирать, так в Gens-е правильно работает, теперь программа, без символа <<SP>>:
10 ORG 40000
20 ENT
30 CALL BEGIN
40 EI
50 RET
60 BEGIN DI
70 LD A,#0F
80 OUT (#FE),A
90 IN A,(#FE)
100 RRA
110 AND #20
120 OR #02
130 LD C,A
140 CP A
150 BREAK RET NZ
160 START CALL EDGE1
170 JR NC,BREAK
180 LD HL,#0415
190 WAIT DJNZ WAIT
200 DEC HL
210 LD A,H
220 OR L
230 JR NZ,WAIT
240 CALL EDGE2
250 JR NC,BREAK
260 LEADER LD B,#9C
270 CALL EDGE2
280 JR NC,BREAK
290 LD A,#C6
300 CP B
310 JR NC,START
320 INC H
330 JR NZ,LEADER
340 SYNC LD B,#C9
350 CALL EDGE1
360 JR NC,BREAK
370 LD A,B
380 CP #D4
390 JR NC,SYNC
400 CALL EDGE1
410 RET NC
420 LD A,C
430 XOR #03
440 LD C,A
450 LD B,#B0
460 CALL MARKER
470 LOOP CALL PLACE
480 RET NC
490 JR LOOP
500 PLACE LD B,#B0
510 CALL MARKER
520 LD L,E
530 LD B,#B0
540 CALL MARKER
550 RET NC
560 LD H,E
570 LD D,#08
580 LD B,#B0
590 GRAF CALL MARKER
600 RET NC
610 LD (HL),E
620 INC H
630 DEC D
640 LD B,#B1
650 JR NZ,GRAF
660 LD A,H
670 SUB #08
680 RRA
690 RRA
700 RRA
710 AND #03
720 OR #58
730 LD H,A
740 LD B,#B2
750 CALL MARKER
760 LD (HL),E
770 RET
780 MARKER LD E,#01
790 LD8BIT CALL EDGE2
800 RET NC
810 LD A,#CB
820 CP B
830 RL E
840 LD B,#B0
850 JR NC,LD8BIT
860 RET
870 EDGE2 CALL EDGE1
880 RET NC
890 EDGE1 LD A,#16
900 DELAY DEC A
910 JR NZ,DELAY
920 AND A
930 SAMPLE INC B
940 RET Z
950 LD A,#7F
960 IN A,(#FE)
970 RRA
980 RET NC
990 XOR C
1000 AND #20
1010 JR Z,SAMPLE
1020 LD A,C
1030 CPL
1040 LD C,A
1050 AND #07
1060 OR #08
1070 OUT (#FE),A
1080 SCF
1090 RET
- - - Добавлено - - -
в алькатразе (в отличии от бегающего квадратика) совсем другая логика работы.
в квадратике (при кодировании) адреса сохраняются на ленту, а в алькатразе они уже внутри загрузчика,
там похоже перед загрузкой строится карта на основании заданных участков экрана.
на WoS есть загрузочный комплект/исходники
http://www.worldofspectrum.org/pub/sinclair/screens/in-game/a/AlkatrazDevelopmentCartridges.gif
...
я в своих дисковых версиях делал эмуляцию проявления таких экранов.
вот нашёл/вспомнил для примера
https://vtrd.in/gamez/s/SIDEARMZ.ZIP
Доброго времени суток goodboy! Скачал архив AlkatrazDevelopmentCartridges.mdr.zip с сайта http://www.worldofspectrum.org/, вот его содержание:
01 - No Label.mdr
01 - No Label.tap
02 - Backup of ITEC Progs.mdr
02 - Backup of ITEC Progs.tap
03 - Alkatraz Utils.mdr
03 - Alkatraz Utils.tap
04 - Alkatraz Utils 2.50.mdr
04 - Alkatraz Utils 2.50.tap
05 - Assembler.mdr
05 - Assembler.tap
06 - Loaders.mdr
06 - Loaders.tap
07 - Assembler Sources.mdr
07 - Assembler Sources.tap
08 - Trans Express.mdr
08 - Trans Express.tap
09 - No Label.mdr
09 - No Label.tap
10 - ITEC Progs.mdr
10 - ITEC Progs.tap
12 - Protector Source.mdr
12 - Protector Source.tap
13 - Routines.mdr
13 - Routines.tap
14 - Master Prog Inst.mdr
14 - Master Prog Inst.tap
16 - Utilities.mdr
16 - Utilities.tap
Alkatraz Carts.xls
MDR2TAP_b2.exe
Упорно искал в tap файлах, хоть один заголовок Program, но безуспешно (может плохо искал), что делать с этим архивом не знаю? Подскажите дельное решение?
Извиняюсь конечно за лаймерство, но по поводу сообщения:
бери готовый код (он в играх от Hewson универсальный)
Это как брать и какой программой и куда в конечном итоге набирать или копировать? (возможно вопрос не данной теме и нужно было создать отдельную – уроки программирования Zx Spectrum, но всё же?)
У меня есть похожий счётчик набранный (из ZX-Ревю 1995 №1).
alex8418
25.10.2019, 06:06
У меня есть похожий счётчик набранный (из ZX-Ревю 1995 №1).
Спасибо morozov за файл counter.zip!
Открыл файл: word.exe makefile, там написано:
boot.tap: boot.bas counter.tap
bas2tap -sboot -a10 boot.bas boot.tap
cat counter.tap EXOLON\$$.tap >> boot.tap
counter.tap: counter.asm
pasmo --bin counter.asm counter.bin
Как после преобразования counter.asm в counter.bin появляется counter.tap?
Открыл файл: word.exe counter.asm, там написано:
org #FC13
JP START
; #FC16-#FC19 - STR$ значений
; счетчика (единицы...тысячи).
DEFB #48,#48,#48,#48
; флаг запрета/разрешения включения счетчика.
ENABLED: DEFB #00
; #FC1B-#FC1C - адрес счетчика в
; таблице.
DEFW #0000
; #FC1D-#FC20 - адрес счетчика в
; дисплейном файле.
DEFW #0000
DEFW #0000
; Хэдер.
HEADER: DEFS #11
; #FC32-#FC89 - шаблоны цифр счетчика
; (стандартно, по 8 байт на символ);
; всего - 11 цифр, следующих:
; 0-1-2-3-4-5-6-7-8-9-0.
DEFB #FE,#C6,#BA,#BA,#BA,#BA,#C6,#FE
DEFB #FE,#EE,#CE,#EE,#EE,#EE,#82,#FE
DEFB #FE,#C6,#BA,#F6,#EE,#DE,#82,#FE
DEFB #FE,#82,#F6,#E6,#FA,#BA,#C6,#FE
DEFB #FE,#F6,#E6,#D6,#B6,#82,#F6,#FE
DEFB #FE,#82,#BE,#86,#FA,#BA,#C6,#FE
DEFB #FE,#E6,#DE,#86,#BA,#BA,#C6,#FE
DEFB #FE,#82,#FA,#F6,#F6,#EE,#EE,#FE
DEFB #FE,#C6,#BA,#C6,#BA,#BA,#C6,#FE
DEFB #FE,#C6,#BA,#BA,#C2,#FA,#C6,#FE
DEFB #FE,#C6,#BA,#BA,#BA,#BA,#C6,#FE
; Сама процедура загрузки по адресу #FC8A
; в основе содержит программу LD-BYTES
; из ПЗУ, которая была подробно описана
; в РЕВЮ-93 №1-2 (стр. 13). Отличия
; незначительны. Все адреса даны
; для новой процедуры.
LD_BYTES: INC D
EX AF,AF'
DEC D
DI
; Далее, для того, чтобы при
; загрузке хэдера не включался
; счётчик, введены строки:
EXX
LD C,#00
EXX
; Далее опять аналогично ПЗУ:
LD A,#0A
OUT (#FE),A
IN A,(#FE)
RRA
AND #20
OR #00
LD C,A
CP A
LD_BREAK: RET NZ
LD_START: CALL LD_EDGE_1
JR NC,LD_BREAK
LD HL,#0415
LD_WAIT: DJNZ LD_WAIT
DEC HL
LD A,H
OR L
JR NZ,LD_WAIT
CALL LD_EDGE_2
JR NC,LD_BREAK
LD_LEADER: LD B,#9C
CALL LD_EDGE_2
JR NC,LD_BREAK
LD A,#C6
CP B
JR NC,LD_START
INC H
JR NZ,LD_LEADER
LD_SYNC: LD B,#C9
CALL LD_EDGE_1
JR NC,LD_BREAK
LD A,B
CP #D4
JR NC,LD_SYNC
CALL LD_EDGE_1
RET NC
; Опять, для того, чтобы при
; загрузке хэдера не включался
; счётчик, поставлен выключатель:
EXX
LD A,(ENABLED)
LD C,A
LD (#FC1F),A
EXX
; Далее — аналогично ПЗУ:
LD H,#00
LD B,#B0
JR LD_MARKER
LD_LOOP: EX AF,AF'
JR NZ,LD_FLAG
JR NC,LD_VERIFY
LD (IX+#00),L
JR LD_NEXT
LD_FLAG: RL C
XOR L
RET NZ
LD A,C
RRA
LD C,A
INC DE
JR LD_DEC
LD_VERIFY: LD A,(IX+#00)
XOR L
RET NZ
LD_NEXT: INC IX
LD_DEC: DEC DE
EX AF,AF'
LD B,#B2
LD_MARKER: LD L,#01
LD_8_BITS: CALL LD_EDGE_2
RET NC
LD A,#CB
CP B
RL L
LD B,#B0
JP NC,LD_8_BITS
LD A,H
XOR L
LD H,A
LD A,D
OR E
JR NZ,LD_LOOP
LD A,H
CP #01
RET
; Программы LD_EDGE_2 и LD_ED_GE_1
; изменены следующим образом:
LD_EDGE_2: CALL LD_EDGE_1
RET NC
LD_EDGE_1: JP PICTO
LD_SAMPLE: INC B
RET Z
LD A,#7F
IN A,(#FE)
RRA
RET NC
XOR C
AND #20
JR Z,LD_SAMPLE
; Описание работы LD_SAMPLE также можно
; найти в указанном ZX_РЕВЮ. Отличия:
LD A,C
CPL
LD C,A
LD (#5AFE),A
LD (#5AFF),A
; — если в отведённое время фронт импульса
; найден, инвертируются все биты на
; противоположные и выдаётся значение
; аккумулятора в две последние ячейки
; атрибутов. Это приводит к тому, что при
; загрузке в двух последних знакоместах
; можно наблюдать полосы, аналогичные
; бордюрным (сам бордюр при загрузке
; остается чёрным). Далее:
SCF
RET
PICTO: EXX
LD A,C
OR A
JR Z,LD_DELAY
; — если в С ноль, то счётчик не включать.
; Иначе — проверка положения счётчика:
LD HL,#FC1F
DEC (HL)
LD A,(HL)
JR Z,SHET
; Далее происходит включение атрибутов
; счётчика, а в HL — адрес счётчика в
; таблице:
CP #05
JR NC,ATT_R
LD HL,#FC1B
; Теперь переход на адреса в дисплейном
; файле:
INC (HL)
INC L
INC L
DEC (HL)
LD HL,(#FC1B)
; Дальнейшая часть вычисляет адрес
; печатаемой цифры:
LD A,(HL)
ADD A,#32
LD E,A
LD D,#FC
; Следующий фрагмент рисует шаблон,
; лежащий в таблице по адресам
; #FC32 — #FC89:
LD HL,(#FC1D)
LD A,(DE)
LD (HL),A
INC E
INC H
LD A,(DE)
LD (HL),A
INC E
INC H
LD A,(DE)
LD (HL),A
INC E
INC H
LD A,(DE)
LD (HL),A
INC E
INC H
LD A,(DE)
LD (HL),A
INC E
INC H
LD A,(DE)
LD (HL),A
INC E
INC H
LD A,(DE)
LD (HL),A
INC E
INC H
LD A,(DE)
LD (HL),A
EXX
JP LD_SAMPLE
; Далее — фрагмент, осуществляющий
; задержку в 358 тактов процессора:
LD_DELAY: LD B,#17
WAIT_1: DJNZ WAIT_1
LD A,#00
NEG
AND A
EXX
JP LD_SAMPLE
; Затем — установка атрибутов в
; знакоместах счётчика:
ATT_R: LD A,#47
LD (#5AFA),A
LD (#5AFB),A
LD (#5AFC),A
LD (#5AFD),A
INC HL
INC HL
LD B,#0D
JP WAIT_1
; Далее следует процедура SHET:
SHET: LD B,#4F
LD DE,(#FC16)
LD HL,(#FC18)
DEC E
JP P,DES
LD E,B
DEC D
LD B,#05
WAIT_2: DJNZ WAIT_2
LD A,(HL)
JP END_
DES: LD A,D
AND #07
JP Z,SOT_1
DEC D
JP P,SOT_2
LD D,B
DEC L
LD A,(#8000)
LD A,(#8000)
LD A,(#8000)
JP END_
SOT_1: LD A,(HL)
LD A,(HL)
SOT_2: LD A,L
AND #07
JP Z,HANDR_1
DEC L
JP P,HANDR_2
LD L,B
DEC H
NEG
JP END_
HANDR_1: LD A,(HL)
LD A,(HL)
HANDR_2: LD A,H
AND #07
JR Z,END_
DEC H
END_: LD (#FC16),DE
LD (#FC18),HL
LD HL,#FC15
LD (#FC1B),HL
LD HL,#50FE
LD (#FC1D),HL
LD A,#40
LD (#FC1F),A
NEG
NEG
NEG
AND A
EXX
JP LD_SAMPLE
; В приведённой процедуре SHET настолько
; точно просчитаны такты выполнения, что
; она работает не хуже процедуры ПЗУ.
; Если просчи тать все ветви выхода
; программы, то будет 358 тактов. Расчёт
; значений счётчика производится
; следующим образом. Длина программы
; в HL берётся из считанного в таблицу
; хэдера, затем это значение делится
; на 32:
LD HL,(HEADER+#0B)
LD B,#05
WAIT_3: SRL H
RR L
DJNZ WAIT_3
; Регистр DE также загружается
; из таблицы, а в ВС — заносится
; число, соответствующее десятичному
; 1000:
LD DE,#FC19
LOOP_2: LD A,#FF
LD BC,#03E8
; Повтором получаем в А 0, 1, 2 и т.д.:
LOOP_1: INC A
OR A
SBC HL,BC
JR NC,LOOP_1
; После сложения и умножения на 8,
; кладём это значение в таблицу:
ADD HL,BC
ADD A,A
ADD A,A
ADD A,A
LD (DE),A
; Умножаем HL на 10:
LD C,L
LD B,H
ADD HL,HL
ADD HL,HL
ADD HL,BC
ADD HL,HL
; Переход к следующей ячейке и
; повтор, если не конец:
DEC DE
LD A,E
CP #15
JR NZ,LOOP_2
RET
; Чтобы сменить цифру в счётчике,
; обозначающую 1 байт, надо сделать
; 32 вызова процедуры расчёта значения
; счетчика. С началом загрузки программой
; блока кодов включаются атрибуты
; в правом нижнем углу, затем с каждым
; вызовом процедуры LD_EDGE происходит
; смена положения счётчика. Так происходит
; до тех пор, пока блок кодов не
; загрузится и в счётчике не будет "0000".
LD_HEADER: XOR A
LD (ENABLED),A
LD IX,HEADER
LD DE,#0011
XOR A
SCF
CALL LD_BYTES
JR NC,ERR
CALL #FE0F
LD A,#01
LD (ENABLED),A
LD IX,(HEADER+#0D)
LD DE,(HEADER+#0B)
LD A,#FF
SCF
CALL LD_BYTES
JR NC,ERR
EI
RET
ERR: JP #0806
START: EXX
PUSH HL
EXX
CALL LD_HEADER
EXX
POP HL
EXX
RET
Вроде бы из статьи ZX-Ревю 1995 №1, но есть видоизмененные строки из журнала, там где в журнале стоит "...", тут стоят конкретные значения (я не отметил где конкретно, нету времени пока)! Откуда они взялись интересно и видоизменена, либо программа, либо часть программы в конце! В каком ассемблере это набиралось тоже вопрос?
Счётчик универсальный между прочим, работает даже с загрузкой основной части игры (сам проверял), как поменять область загрузки для запуска игры пока не знаю (какие картинки можно грузить с помощью загрузчика тоже?)?
Как убрать эту мигающую фигню рядом с счётчиком не знаю, а вместо неё сделать чтобы мелькали цветные чёрточки на бордюре во время загрузки?
- - - Добавлено - - -
ZX REVU 1995 №1
- - - Добавлено - - -
Сам журнал
Bedazzle
25.10.2019, 07:19
...
В каком ассемблере это набиралось тоже вопрос?
...
Как после преобразования counter.asm в counter.bin появляется counter.tap?
Ассемблер - pasmo.
Тапок собирается в bas2tap.
Как убрать эту мигающую фигню рядом с счётчиком не знаю, а вместо неё сделать чтобы мелькали цветные чёрточки на бордюре во время загрузки?
Может, начать с чего попроще для начала? К примеру, прикрутить лоадер к другой игрушке, и разобраться, где что менять для блоков разной длины и расположения в памяти?
Как убрать эту мигающую фигню рядом с счётчиком не знаю
> LD (#5AFE),A
> LD (#5AFF),A
Эти две команды загружают значение из аккумулятора в область атрибутов на месте мигающей фигни. Насколько я понимаю, если этот код убрать, может понадобиться менять искусственные задержки в других местах, чтобы общее количество тактов осталось неизменным.
Счётчик универсальный между прочим, работает даже с загрузкой основной части игры (сам проверял), как поменять область загрузки для запуска игры пока не знаю (какие картинки можно грузить с помощью загрузчика тоже?)?
Это такой же универсальный загрузчик, как и стандартный LD_BYTES. Интерфейс вроде бы тот же.
Bedazzle
26.10.2019, 09:49
Насколько я понимаю, если этот код убрать, может понадобиться менять искусственные задержки в других местах, чтобы общее количество тактов осталось неизменным.
...или заменить адрес, и писать в пзу :)
alex8418
28.10.2019, 02:25
Ассемблер - pasmo.
Тапок собирается в bas2tap.
Есть получилось, сам создал counter.tap из counter.asm, только пользователь morozov забыл указать ещё одну программу:
Вот как я сделал:
1. Вводим pasmo --bin counter.asm counter.bin
получается: counter.bin
2. Вводим bin2tap -c counter.bin counter.tap counter 64531
получается: counter.tap - аналогичный из архива counter.zip (пользователя morozov)!
- - - Добавлено - - -
> LD (#5AFE),A
> LD (#5AFF),A
Эти две команды загружают значение из аккумулятора в область атрибутов на месте мигающей фигни. Насколько я понимаю, если этот код убрать, может понадобиться менять искусственные задержки в других местах, чтобы общее количество тактов осталось неизменным.
Пока не разбирался с мигающим квадратом, вопрос к morozov-у другой - откуда взялся полный текст программы в том числе с изменениями в конце её, ведь в журнале ZX Review 1995 №1 она написана не полностью? (возможно хитрость состоит в том, что нужно прочитать весь номер сначала до конца?)
- - - Добавлено - - -
Я конечно понимаю, что автоматизация сестра прогресса, но всё же, допустим:
Купил Я плату к примеру Пентагона 128 Kb на zx-pk.com у одного из пользователей, спаял её, наладил, запускаю, передо мной табличка:
1. Tape Loader
2. 128 BASIC
3. Calculator
4. 48 BASIC
5. TR-DOS
Лежит передо мной распечатанный журнал ZX REVU 1995 №1, есть аудио-вход (дисководом не обзавёлся), спаян шнурок от аудио к разъёму mp3 плеера (с помощью программы tap2mp3 или как её там не помню перевёл tap и tzx в mp3)!
Так вот вопрос - какую программу мне использовать, что набрать программу из файла counter.asm на реальном спектруме без эмуляции?
откуда взялся полный текст программы в том числе с изменениями в конце её, ведь в журнале ZX Review 1995 №1 она написана не полностью?
В этом же номере журнала, в конце статьи есть двоичный дамп. Я его набрал, а потом с помощью SkoolKit (https://github.com/skoolkid/skoolkit) сконвертировал в исходный код. Из изменений — помню, что где-то исправлял одну опечатку, но не более. Дальше вроде бы хотел избавиться от захардкоженных адресов, чтобы сделать процедуру более переносимой, но до конца не доделал. К сожалению, в истории изменений этого нет, но если есть вопросы по конкретным элементам, можно обсуждать в гит-репозитории (https://github.com/morozov/counter) (специально опубликовал).
Есть получилось, сам создал counter.tap из counter.asm, только пользователь morozov забыл указать ещё одну программу:
Вот как я сделал:
1. Вводим pasmo --bin counter.asm counter.bin
получается: counter.bin
2. Вводим bin2tap -c counter.bin counter.tap counter 64531
получается: counter.tap - аналогичный из архива counter.zip (пользователя morozov)!
Там то же самое в мейк-файле. Ничего вручную запускать не обязательно, он как раз и нужен, чтобы автоматизировать процесс сборки (правда этот подход рассчитан на Linux/OSX, а не на Windows).
Так вот вопрос - какую программу мне использовать, что набрать программу из файла counter.asm на реальном спектруме без эмуляции?
Тут не помогу. Я в своё время код писал на бумажке, переводил в машинные коды и вводил чем-то типа FOR/DATA/POKE. По идее, должен подойти любой ассемблер, т.к. никаких наворотов в этой программе нет. Правильно ли я понимаю, что задача состоит именно в том, чтобы написать загрузчик на настоящем компьютере? Почему нельзя написать его в эмуляторе, а потом загрузить в компьютер? Я так понимаю, что до написания, что до компьютера пока далеко.
- - - Добавлено - - -
...или заменить адрес, и писать в пзу
Конечно, это проще, но не спортивно. Топик-стартер-то хочет написать свой загрузчик (читай, разобраться по ходу, что к чему).
Bedazzle
28.10.2019, 07:55
Конечно, это проще, но не спортивно. Топик-стартер-то хочет написать свой загрузчик (читай, разобраться по ходу, что к чему).
Разобраться - дело похвальное. Но судя по вопросам, человеку совсем с азов начинать требуется.
И видимо, лучше пробовать что-то проще, чем кастомный загрузчик. Например, смена цвета бордюра, тушение экрана, и т.п.
alex8418
03.11.2019, 13:20
> LD (#5AFE),A
> LD (#5AFF),A
Эти две команды загружают значение из аккумулятора в область атрибутов на месте мигающей фигни. Насколько я понимаю, если этот код убрать, может понадобиться менять искусственные задержки в других местах, чтобы общее количество тактов осталось неизменным.
Это такой же универсальный загрузчик, как и стандартный LD_BYTES. Интерфейс вроде бы тот же.
Убрал строки LD (#5AFE),A и LD (#5AFF),A из программы counter.asm, результат на картинке в прикреплении (пытался убрать LD A,C CPL LD C,A LD (#5AFE),A LD (#5AFF),A, но программа виснет)! Вообщем появляется козябрик вместо первой цифры счётчика, мигающая фигня исчезла, но и счётчик считает неправильно начиная с 999! Сразу появилось ещё два вопроса: что определяет положение счётчика на картинке и почему бордюр красный, если в журнале написано, что он должен быть чёрным?
- - - Добавлено - - -
В этом же номере журнала, в конце статьи есть двоичный дамп. Я его набрал, а потом с помощью SkoolKit (https://github.com/skoolkid/skoolkit) сконвертировал в исходный код. Из изменений — помню, что где-то исправлял одну опечатку, но не более. Дальше вроде бы хотел избавиться от захардкоженных адресов, чтобы сделать процедуру более переносимой, но до конца не доделал. К сожалению, в истории изменений этого нет, но если есть вопросы по конкретным элементам, можно обсуждать в гит-репозитории (https://github.com/morozov/counter) (специально опубликовал).
Зашёл по ссылке SkoolKit, скачал компилятор Python 3.4.3 с сайта Python.org, установил на компьютер - не разобрался в нём, пытался скопировать текст программы skool2bin.py с помощью клавиш Ctrl + Ins или Ctrl + C и вставить с помощью Shift + Ins или Shift +V - не получается! Объясните пожалуйста morozov как работать с комплектом программ, по указанной Вами ссылке?
- - - Добавлено - - -
Тут не помогу. Я в своё время код писал на бумажке, переводил в машинные коды и вводил чем-то типа FOR/DATA/POKE. По идее, должен подойти любой ассемблер, т.к. никаких наворотов в этой программе нет. Правильно ли я понимаю, что задача состоит именно в том, чтобы написать загрузчик на настоящем компьютере? Почему нельзя написать его в эмуляторе, а потом загрузить в компьютер? Я так понимаю, что до написания, что до компьютера пока далеко.
Мне интересен процесс написания этой программы первопроходцами, а именно Newson-ом, у них же не было эмуляторов, я загрузчики защищенные при этом они писали! Как?
Я так понимаю через операторы READ и DATA в бэйсике программа будет иметь такой вид, как приведённая мною ниже (приблизительно):
10 DIM a(22)
20 FOR i=1 TO 22
30 READ a(i)
40 POKE (25999+i),a(i)
50 NEXT i
60 DATA 17,255,63,33
70 DATA 0,0,126,230
80 DATA 7,211,254,126
90 DATA 71,16,254,35
100 DATA 27,122,179,32
110 DATA 241,201
120 RANDOMIZE USR 26000
Только как через оператор DATA будет выглядеть строка из дампа блоков - FC13: C3 69 FE 48 48 48 48 00 :59 ???
- - - Добавлено - - -
Разобраться - дело похвальное. Но судя по вопросам, человеку совсем с азов начинать требуется.
И видимо, лучше пробовать что-то проще, чем кастомный загрузчик. Например, смена цвета бордюра, тушение экрана, и т.п.
Извиняйте за моё малознание, честно говоря идея написать этот загрузчик, запала ещё в далеких 90-х, когда я его только увидел, я долго тогда мучался с бэйсиком - думал, что получиться набрать эту программу, пока не пришло разочарование, но книги и журналы было тогда достать трудновато и стоили денег (да и лишних тогда не было), про интернет вообще тогда можно было и не мечтать - это было запредельно дорогое удовольствие, да и скорость по нашим сейчас меркам отвратительная!
Поэтому извиняйте, но вопрос Я задам ещё один (пускаю он и не в рамках данного топика), то что ещё не освоилось в мозгах, а именно:
Чем отличается программа набранная в GENS-4:
10 ORG 40000
20 ENT
30 CALL BEGIN
40 EI
50 RET
60 BEGIN DI
70 LD A,#0F
80 OUT (#FE),A
90 IN A,(#FE)
100 RRA
110 AND #20
120 OR #02
130 LD C,A
140 CP A
150 BREAK RET NZ
..........................
от программы данного счётчика???:
org #FC13
JP START
; #FC16-#FC19 - STR$ значений
; счетчика (единицы...тысячи).
DEFB #48,#48,#48,#48
; флаг запрета/разрешения включения счетчика.
ENABLED: DEFB #00
; #FC1B-#FC1C - адрес счетчика в
; таблице.
DEFW #0000
; #FC1D-#FC20 - адрес счетчика в
; дисплейном файле.
DEFW #0000
DEFW #0000
; Хэдер.
HEADER: DEFS #11
...........................
Вроде и та и другая - это программа набранная в ассемблере, но одну Я набираю в GENS-4, а другую надо загонять в спектрум через двоичный дамп в конце статьи журнала ZX REVU непонятным способом!
Так в чём в всё-таки отличия этих программ???
Bedazzle
03.11.2019, 16:18
Зашёл по ссылке SkoolKit, скачал компилятор Python 3.4.3 с сайта Python.org, установил на компьютер - не разобрался в нём
Python и SkoolKit для задачи написания своего загрузчика вам не нужны.
Набор SkoolKit используется для исследования бинарных файлов и преобразования их в ассемблерный текст.
Волшебства не происходит, и большую часть работы по определению что за что отвечает приходится делать глазками и ручками.
Мне интересен процесс написания этой программы первопроходцами, а именно Newson-ом, у них же не было эмуляторов, я загрузчики защищенные при этом они писали! Как?
Коммерческий софт часто писался на более мощных машинах, там же компилировался, и заливался на zx для тестирования.
Я так понимаю через операторы READ и DATA в бэйсике программа
А зачем вам бейсик? Пишите на ассемблере, можно прямо в эмуляторе пробовать собирать.
Если же хочется с самых истоков, то есть к примеру, книги "Как написать игру на бейсике" и "Как написать игру на ассемблере".
В них много чего интересного можно узнать. Можно также журналы ZX-ревю, огромный кладезь информации, но разрозненными кусочками.
Извиняйте за моё малознание, честно говоря идея написать этот загрузчик, запала ещё в далеких 90-х, когда я его только увидел, я долго тогда мучался с бэйсиком - думал, что получиться набрать эту программу, пока не пришло разочарование, но книги и журналы было тогда достать трудновато и стоили денег (да и лишних тогда не было), про интернет вообще тогда можно было и не мечтать - это было запредельно дорогое удовольствие, да и скорость по нашим сейчас меркам отвратительная!
Зачем извиняться человеку, который ищет знаний? Это же здорово. А про 90е... у большинства наверное не было возможности добыть полезную и полную информацию.
Чем отличается программа набранная в GENS-4:
Программа, набранная как ассемблерный текст (Gens, Tasm, Alasm, SjASM, или ещё какой, неважно) предназначена для перевода с человеком понятных текстовых команд в машинный код (набор числовых инструкций в виде файла байт).
Далее этот файл загружается в память компьютера и запускается к примеру, через RANDOMIZE USR...
а другую надо загонять в спектрум через двоичный дамп в конце статьи журнала ZX REVU непонятным способом!
Загонять через двоичный дамп или числами через массив DATA могли пользователи, не сильно искушённые в работе компа, не имеющие нужных навыков и/или необходимого софта (например, ассемблера).
Тогда к примеру, настучав бейсиковую программу (а бейсик-то был доступен сразу), и запустив её, человек получал в памяти компьютера последовательность чисел. Эта последовательность (кусок оперативной памяти) сохранялась в виде файла (на ленту или диск).
Так в чём в всё-таки отличия этих программ???
Т.е. в конечном результате разницы нет - будет получен какой-то файлик, содержащий программу (или графику, или другие данные).
Вопрос только в удобстве средств и затраченного времени на получение этого файлика.
Как это делалось "тогда", первопроходцами, и как это можно сделать сейчас - две большие разницы.
Ну, и как уже предлагал - если есть время и интерес, лучше маленькими шажками, и всё-таки не с загрузчика. А, например:
ld hl, #4000 ; 16384
ld de, #4001 ; 16385
ld bc, #1AFF ; 6911
xor a ; A = 0
ld (hl), a ; зануляем первый байт экрана
ldir ; очищаем экран
ret
Объясните пожалуйста morozov как работать с комплектом программ, по указанной Вами ссылке?
Смотрите в Makefile. Он определяет процесс сборки:
# Компилируем код счётчика в tap-файл
pasmo --tap counter.asm counter.tap
# Компилируем код бейсик-загрузчика в другой tap-файл
bas2tap -sboot -a10 boot.bas boot.tap
# Объединяем загрузчик, счётчик и картинку вместе
cat counter.tap EXOLON\$$.tap >> boot.tap
Если вы пользуетесь macOS или Linux, и при условии, то что все нужные программы у вас установлены, просто набрав make в терминале, вы получите готовый tap-файл. Из зависимостей — tap2bas (https://github.com/andybalaam/bas2tap) для компиляции бейсик-файла в tap-образ (не знаю, чем/как собрать под Windows, но должно быть возможно) и Pasmo (http://pasmo.speccy.org/) — кросс-компилятор ассемблера (должен работать на чём угодно).
GNU Make (https://www.gnu.org/software/make/) устроен таким образом, что при каждом запуске он проверяет, какие из исходных файлов изменились и выполняем необходимый минимум команд, чтобы пересобрать итоговый файл. Таким образом, каждый раз после того, как я что-то поменял в исходных текстах, я набираю make и получаю готовый tap-образ.
- - - Добавлено - - -
Ну, и как уже предлагал - если есть время и интерес, лучше маленькими шажками, и всё-таки не с загрузчика. А, например:
ld hl, #4000 ; 16384
ld de, #4001 ; 16385
ld bc, #1AFF ; 6911
xor a ; A = 0
ld (hl), a ; зануляем первый байт экрана
ldir ; очищаем экран
ret
Я в своё время разобрался с ассемблером и Pasmo с помощью нескольких видеоуроков (https://www.youtube.com/watch?v=gwBsbz4TRD0). Как раз подойдёт для примера выше.
Bedazzle
04.11.2019, 21:27
Я в своё время разобрался с ассемблером и Pasmo
Как инфа топикстартеру - если я правильно понял, в европах в основном используют Pasmo, в русскоговорящей же тусовке больше распространён SjASM.
Но по большому счёту, большинство исходных текстов программ с небольшими изменениями можно собирать в любом ассемблере.
Ну да, в УжаСме как то привычнее собирается.
Бейсик собирал BasinC-ом, вернее Builder-ом в нем, в отладчике что-то неправильно этот пример работает.
Интересно было бы (для меня:) во время задержки в 358 тактов бордюр прорисовывать, но тактов точно не хватит.
А в целом - прикольно конечно, но не актуально :)
alex8418
11.11.2019, 00:00
Ну да, в УжаСме как то привычнее собирается.
Бейсик собирал BasinC-ом, вернее Builder-ом в нем, в отладчике что-то неправильно этот пример работает.
Интересно было бы (для меня:) во время задержки в 358 тактов бордюр прорисовывать, но тактов точно не хватит.
А в целом - прикольно конечно, но не актуально :)
Спасибо zebest за счётчик! Жалко что в архиве нет файла counter.asm, сразу возникает первый вопрос - это счётчик из журнала ZX REVU 1995 №1 или Вы вскрыли загрузчик Newson-а? Т.к. нет ASM текста программы бессмысленно спрашивать вопросы заданные ранее и не отвеченные: где в программе задается положение счётчика на экране и почему бордюр красный, хотя должен быть чёрным???
В crack-нутой игре Sabouter-2 (релиз в прикреплении ниже), у автора загрузчика получилось сделать и счётчик и полосы (счётчик в виде отчёта времени, а полосы правда только поменяли цвет на сине-чёрный)!!! Но прикол ещё в том, что программа ассемблера загружается в блоке Program !!!
программа ассемблера загружается в блоке Program !!!
обычное дело. код размещается после REM
alex8418
11.11.2019, 00:29
Смотрите в Makefile. Он определяет процесс сборки:
# Компилируем код счётчика в tap-файл
pasmo --tap counter.asm counter.tap
# Компилируем код бейсик-загрузчика в другой tap-файл
bas2tap -sboot -a10 boot.bas boot.tap
# Объединяем загрузчик, счётчик и картинку вместе
cat counter.tap EXOLON\$$.tap >> boot.tap
Если вы пользуетесь macOS или Linux, и при условии, то что все нужные программы у вас установлены, просто набрав make в терминале, вы получите готовый tap-файл. Из зависимостей — tap2bas (https://github.com/andybalaam/bas2tap) для компиляции бейсик-файла в tap-образ (не знаю, чем/как собрать под Windows, но должно быть возможно) и Pasmo (http://pasmo.speccy.org/) — кросс-компилятор ассемблера (должен работать на чём угодно).
GNU Make (https://www.gnu.org/software/make/) устроен таким образом, что при каждом запуске он проверяет, какие из исходных файлов изменились и выполняем необходимый минимум команд, чтобы пересобрать итоговый файл. Таким образом, каждый раз после того, как я что-то поменял в исходных текстах, я набираю make и получаю готовый tap-образ.
- - - Добавлено - - -
Я в своё время разобрался с ассемблером и Pasmo с помощью нескольких видеоуроков (https://www.youtube.com/watch?v=gwBsbz4TRD0). Как раз подойдёт для примера выше.
Спасибо morozov, c тем что Вы описали я давно разобрался (вообще для сборки файлов использую Win7), а так имел ввиду - как работать с комплектом программ Skoolkit, открыл ссылку и не понял, что делать дальше (фото в прикреплении)?
Я так понял что программу приведённую в Вашем ответе надо написать например в SjASM, сохранить в файле *.asm, а потом преобразовать в *.tap по уже известной схеме?
- - - Добавлено - - -
обычное дело. код размещается после REM
Ой спасибо goodboy, а пример приведёте из рабочей программы?
где в программе задается положение счётчика
Адрес экранной области задаётся в LD HL,#50FE (https://github.com/morozov/counter/blob/e9bba80cbd70d8bf525c464b5fd1ca8b15e6853d/counter.asm#L338) (см. комментарии (https://github.com/morozov/counter/blob/e9bba80cbd70d8bf525c464b5fd1ca8b15e6853d/REVU95_1.txt#L1819) в статье из журнала), адрес области атрибутов — в LD (#5AFA),A (https://github.com/morozov/counter/blob/e9bba80cbd70d8bf525c464b5fd1ca8b15e6853d/counter.asm#L284-L287).
alex8418
11.11.2019, 00:58
Python и SkoolKit для задачи написания своего загрузчика вам не нужны.
Набор SkoolKit используется для исследования бинарных файлов и преобразования их в ассемблерный текст.
Волшебства не происходит, и большую часть работы по определению что за что отвечает приходится делать глазками и ручками.
Спасибо всем: Bedazzle, morozov-у, zebest-у, goodboy-ю за Ваши ответы и за то что тема до сих пор не заглохла!
Потому сейчас вопрос задам всем, а именно, как мне набрать полный дамп программы из журнала ZX REVU 1995 №1
FC13: C3 69 FE 48 48 48 48 00 :59
FC1B: 00 00 00 00 00 00 00 00 :17
FC23: 00 00 00 00 00 00 00 00 :1F
FC2B: 00 00 00 00 00 00 00 FE :25
FC33: C6 BA BA BA BA C6 FE FE :9F
FC3B: EE CE EE EE EE 82 FE FE :3B
FC43: C6 BA F6 EE DE 82 FE FE :FF
FC4B: 82 F6 E6 FA BA C6 FE FE :1B
FC53: F6 E6 D6 B6 82 F6 FE FE :2B
FC5B: 82 BE 86 FA BA C6 FE FE :93
FC63: E6 DE 86 BA BA C6 FE FE DF
FC6B: 82 FA F6 F6 EE EE FE FE :A7
FC73: C6 BA C6 BA BA C6 FE FE :EB
FC7B: C6 BA BA C2 FA C6 FE FE :2F
FC83: C6 BA BA BA BA C6 FE 14 :05
FC8B: 08 15 F3 D9 0E 00 D9 3E :95
FC93: 0A D3 FE DB FE 1F E6 20 :68
FC9B: F6 00 4F BF C0 CD 20 FD :45
FCA3: 30 FA 21 15 04 10 FE 2B :3C
FCAB: 7C B5 20 F9 CD 1C FD 30 :07
FCB3: EB 06 9C CD 1C FD 30 E4 :36
FCBB: 3E C6 B8 30 EO 24 20 F1 :B8
FCC3: 06 C9 CD 20 FD 30 D5 78 :F5
FCCB: FE D4 30 F4 CD 20 FD D0 :77
FCD3: D9 3A 1A FC 4F 32 1F FC :94
FCDB: D9 26 00 06 B0 18 1F 08 :CB
FCE3: 20 07 30 0F DD 75 00 18 :AF
FCEB: 0F CB 11 AD C0 79 1F 4F :26
FCF3: 13 18 07 DD 7E 00 AD C0 :E9
FCFB: DD 23 1B 08 06 B2 2E 01 :01
FD03: CD 1C FD D0 3E CB B8 CB :42
FD0B: 15 06 B0 D2 03 FD 7C AD :CE
FD13: 67 7A B3 20 CA 7C FE 01 :09
FD1B: C9 CD 20 FD D0 C3 3B FD :96
FD23: 04 C8 3E 7F DB FE 1F D0 :71
FD2B: A9 E6 20 28 F3 79 2F 4F :E9
FD33: 32 FE 5A 32 FF 5A 37 C9 :45
FD3B: D9 79 B7 28 40 21 1F FC :E5
FD43: 35 7E 28 5B FE 05 30 42 :EB
FD4B: 21 1B FC 34 2C 2C 35 2A :6B
FD53: 1B FC 7E C6 32 5F 16 FC :4E
FD5B: 2A 1D FC 1A 77 1C 24 1A :86
FD63: 77 1C 24 1A 77 1C 24 1A :02
FD6B: 77 1C 24 1A 77 1C 24 1A :0A
FD73: 77 1C 24 1A 77 1C 24 1A :12
FD7B: 77 D9 C3 23 FD 06 17 10 D8
FD83: FE 3E 00 ED 44 A7 D9 C3 :30
FD8B: 23 FD 3E 47 32 FA 5A 32 :E5
FD93: FB 5A 32 FC 5A 32 FD 5A :F6
FD9B: 23 23 06 0D C3 82 FD 06 :39
FDA3: 4F ED 5B 16 FC 2A 18 FC :87
FDAB: 1D F2 B9 FD 58 15 06 05 :E5
FDB3: 10 FE 7E C3 EC FD 7A E6 :48
FDBB: 07 CA D1 FD 15 F2 D3 FD :2E
FDC3: 50 2D 3A 00 80 3A 00 80 :B1
FDCB: 3A 00 80 C3 EC FD 7E 7E :2A
FDD3: 7D E6 07 CA E4 FD 2D F2 :04
FDDB: E6 FD 68 25 ED 44 C3 EC :28
FDE3: FD 7E 7E 7C E6 07 28 01 :6B
FDEB: 25 ED 53 16 FC 22 18 FC :95
FDF3: 21 15 FC 22 1B FC 21 FE :7A
FDFB: 50 22 1D FC 3E 40 32 1F :52
FE03: FC ED 44 ED 44 ED 44 A7 :37
FE0B: D9 C3 23 FD 2A 2C FC 06 :1D
FE13: 05 CB 3C CB 1D 10 FA 11 :20
FE1B: 19 FC 3E FF 01 E8 03 3C :93
FE23: B7 ED 42 30 FA 09 87 87 :48
FE2B: 87 12 4D 44 29 29 09 29 D7
FE33: 1B 7B FE 15 20 E4 C9 AF :56
FE3B: 32 1A FC DD 21 21 FC 11 :AD
FE43: 11 00 AF 37 CD 8A FC 30 :BB
FE4B: 1A CD 0F FE 3E 01 32 1A :C8
FE53: FC DD 2A 2E FC ED 5B 2C :F2
FE5B: FC 3E FF 37 CD 8A FC 30 :4C
FE63: 02 FB C9 C3 06 08 D9 E5 :B6
FE6B: D9 CD 3A FE D9 E1 D9 C9 :A3
В строках FC63,FD7B и FE2B убрал знак ":", так появляется Dizzy - :D в контрольных суммах DF,D8 и D7 соответсвенно!
- - - Добавлено - - -
Адрес экранной области задаётся в LD HL,#50FE (https://github.com/morozov/counter/blob/e9bba80cbd70d8bf525c464b5fd1ca8b15e6853d/counter.asm#L338) (см. комментарии (https://github.com/morozov/counter/blob/e9bba80cbd70d8bf525c464b5fd1ca8b15e6853d/REVU95_1.txt#L1819) в статье из журнала), адрес области атрибутов — в LD (#5AFA),A (https://github.com/morozov/counter/blob/e9bba80cbd70d8bf525c464b5fd1ca8b15e6853d/counter.asm#L284-L287).
Спасибо morozov, посмотрю как появиться время!
Bedazzle
11.11.2019, 01:38
Потому сейчас вопрос задам всем, а именно, как мне набрать полный дамп программы из журнала ZX REVU 1995 №1
Я вырезал в текстовике лишнее, через DB скомпилировал бинарник, потом его дизассемблировал.
В полученный листинг глубоко не вникал, но сейчас он компилируется.
Положил сюда:
https://pastebin.com/0up0WLjS
В строках FC63,FD7B и FE2B убрал знак ":", так появляется Dizzy - в контрольных суммах DF,D8 и D7 соответсвенно!
Чтобы текст кода не обрабатывался движком форума, его нужно обрамлять в теги
...[/code]. Кроме этого, он будет отображаться ровно, моноширинным шрифтом.
[code]FC63: E6 DE 86 BA BA C6 FE FE :DF
- - - Добавлено - - -
как работать с комплектом программ Skoolkit, открыл ссылку и не понял, что делать дальше
Вот инструкция по установке (https://skoolkit.ca/docs/skoolkit/usage.html) (в т.ч. и на Windows), вот подробная инструкция по разбору игры (https://skoolkit.ca/docs/skoolkit/diy.html).
alex8418
12.11.2019, 23:00
- - - Добавлено - - -
Ой спасибо goodboy, а пример приведёте из рабочей программы?
Всё-таки интересно, как можно использовать оператор REM в бэйсике??? Мне известно 2-а случая (больше нигде в литературе никаких применений не нашёл): 1) комментарии к строкам программы в бэйсике; 2) для загрузки файлов с дискеты - RANDOMIZE USR 15619: REM: LOAD "picture" CODE 16384, 6912 (только не помню надо ли задавать длину для загрузки, а так вроде всё верно?)
- - - Добавлено - - -
через DB скомпилировал бинарник, потом его дизассемблировал.
Bedazzle не подскажите, что за программа такая DB, ранее по тексту топика не встречалась???
- - - Добавлено - - -
Чтобы текст кода не обрабатывался движком форума, его нужно обрамлять в теги
...[/code]. Кроме этого, он будет отображаться ровно, моноширинным шрифтом.
[code]FC63: E6 DE 86 BA BA C6 FE FE :DF
- - - Добавлено - - -
Вот инструкция по установке (https://skoolkit.ca/docs/skoolkit/usage.html) (в т.ч. и на Windows), вот подробная инструкция по разбору игры (https://skoolkit.ca/docs/skoolkit/diy.html).
Спасибо morozov за подробные ответы! Когда разберусь, отпишу Вам, если будет что непонятно!
Labrador
13.11.2019, 01:55
Всё-таки интересно, как можно использовать оператор REM в бэйсике???
Т.к. после REM могут идти любые символы и интерпретатор бейсика их ни как не обрабатывает, туда вбивают нужное количество байт (например пробелами) и потом записывают любой код, который будет сохраняться/загружаться вместе с бейсик программой. Почитай ZX-Ревю. Там много интересного, к сожалению не помню в каком конкретно номере описывается такой трюк с бейсиком, много лет назад читал.
а пример приведёте из рабочей программы?
Да вот хотя бы эту заставку (https://github.com/morozov/bill-gilbert/blob/9d9f280f4f0d83da3c16d4f6405826cb61269bab/src/boot.bas#L1) посмотрите. Весь машинный код запихивается (https://github.com/morozov/bill-gilbert/blob/9d9f280f4f0d83da3c16d4f6405826cb61269bab/Makefile#L5) после REM в нулевую строку и вызывается через RANDOMIZE USR.
В моём случае пробелы не вбиваются изначально вручную, а сразу записываются кодом компилятором бейсика.
Bedazzle
13.11.2019, 07:55
Bedazzle не подскажите, что за программа такая DB, ранее по тексту топика не встречалась???
Сокращение от Define Byte.
Подробнее можно прочесть тут (https://github.com/sjasmplus/sjasmplus/wiki#byte-bytes).
alex8418
03.11.2021, 23:21
Ну да, в УжаСме как то привычнее собирается.
Бейсик собирал BasinC-ом, вернее Builder-ом в нем, в отладчике что-то неправильно этот пример работает.
Интересно было бы (для меня:) во время задержки в 358 тактов бордюр прорисовывать, но тактов точно не хватит.
А в целом - прикольно конечно, но не актуально :)
Шалом!!!
Ахтунг!!!
Салам Молекум!!!
Добрый вечер!!!
И ещё не знаю как там!!!
Вообщем вопреки задержке в 358 тактов и вопреки утверждениям zebest-а у меня получилось взять от 48К спеки всё!!! Представляю Вам мой загрузчик со счётчиком и бордюром с цветными полосами!!! Постараюсь в ближайшее время доделать загрузчик картинки с загрузкой в обратную сторону, пока не получается - машинный код капризная штука!!!
Как мне кажется, когда грузится несжатая картинка, а особенно нестандартным образом, ни счётчика ни полосок не надо, т.к. этот процесс сам по себе занимает. Ну а когда есть счётчик, полоски тоже не особо нужны, т.к. счётчик уже и есть индикатор загрузки. Хотя, конечно, в качестве спортивного упражнения — почему нет? Ну и о вкусах не спорят.
На мой вкус, вот если бы из этого линейного загрузчика (https://github.com/morozov/linear/blob/master/src/loader.asm) убрать полоски, было бы красиво.
вопреки утверждениям zebest-а
зебест насколько емуу помниЦЦа несколько другое утверждал, типа такого (псевдо-квази загрузчик экрана :)
76333
со статикой на бордере (тайминги в поделке конечно Пентагон-а) . Уж оченно трудно прибивать бордер гвоздями при нечетком кол-ве тактов)
С произвольными полосочками-черточками довольно много тап-загрузчиков. И красивых много.
Но для меня лично во всех этих загрузчиках всего один минус. Под названием - DivMMC :((
А так то да, круто!!!
С произвольными полосочками-черточками довольно много тап-загрузчиков. И красивых много.
Но для меня лично во всех этих загрузчиках всего один минус. Под названием - DivMMC (
А так то да, круто!!!
а что мешает прикрутить вывод на бордюр в депакер ?
(разжим файла после загрузки)
alex8418
04.11.2021, 16:14
Как мне кажется, когда грузится несжатая картинка, а особенно нестандартным образом, ни счётчика ни полосок не надо, т.к. этот процесс сам по себе занимает. Ну а когда есть счётчик, полоски тоже не особо нужны, т.к. счётчик уже и есть индикатор загрузки. Хотя, конечно, в качестве спортивного упражнения — почему нет? Ну и о вкусах не спорят.
На мой вкус, вот если бы из этого линейного загрузчика (https://github.com/morozov/linear/blob/master/src/loader.asm) убрать полоски, было бы красиво.
Вот мой вариант загрузки картинки, который удалось пока получить! Хочу сделать вариант загрузки данной картинки наоборот, чтобы сначала атрибуты грузились снизу вверх, а потом по атрибутам картинка плавно полосками одна за другой снизу вверх(а не через пять как в стандартной загрузке), а бордюр при этом оставался чёрного цвета, чтобы было интересно наблюдать за процессом! В представленном мною счётчике происходит стандартная загрузка картинки из процедуры ld-bytes в область 16384 без изменений!
- - - Добавлено - - -
зебест насколько емуу помниЦЦа несколько другое утверждал, типа такого (псевдо-квази загрузчик экрана :)
76333
со статикой на бордере (тайминги в поделке конечно Пентагон-а) . Уж оченно трудно прибивать бордер гвоздями при нечетком кол-ве тактов)
С произвольными полосочками-черточками довольно много тап-загрузчиков. И красивых много.
Но для меня лично во всех этих загрузчиках всего один минус. Под названием - DivMMC :((
А так то да, круто!!!
zebest, Я Вам про Анджелина Джоли, а Вы мне про Монику Левински! Ёпрст! Какое отношение имеет прорисовка заставки в загруженной программе к изменённому - модифицированному загрузчику стандартной процедуры ld-bytes Зикс Спектрума??? (согласно файла, который Вы прикрепили!)
alex8418
06.11.2021, 13:04
Доброго времени суток уважаемые гости форума, а так же владельцы своих топиков! Хочу создать новый топик под названием Программирование в машинном коде и ассемблере на ZX Spectrum (для чайников)! Топик будет ориентирован на людей, которые вообще не знают как это делается на реальном спектруме и основан на собственном опыте изучения данного вопроса (поэтому профессионалы - не судите строго!)! В топике будут часто встречаться ссылки на журнал ZX Ревю, я думаю авторы журнала не обидятся на меня, так как написанным статьям исполнилось уже 30 лет и на данный момент Я считаю они утратили свою актуальность по причине неугомонно растущего технологического процесса! Хочу спросить у пользователей форума, есть ли востребованность в указанном выше топике (если да то будем писать, что знаем!)?
Топик - Хочу написать кассетный загрузчик похожий на Alkatraz но не совсем!!! Прикольнее!! скорее всего закончиться, тем что я напишу модифицированный загрузчик картинки снизу вверх!
загрузчик картинки снизу вверх!
для начала сгодится и бейсик.
тебе ведь придётся переставить линии в загрузочной картинке (то есть сначала выгрузить её в изменённом формате)
знаний for next step-X , peek poke + строение экрана должно хватить.
напиши эмулятор картинки (она из памяти просто выводится на экран как ты задумал)
они утратили свою актуальность по причине неугомонно растущего технологического процесса!
А можно уточнить, какой именно у ZX-Spectrum произошёл "технологический процесс" за 40 лет? Теперь, к примеру, DOWN_HL уже неактуальна?
Bedazzle
06.11.2021, 21:42
А можно уточнить, какой именно у ZX-Spectrum произошёл "технологический процесс" за 40 лет? Теперь, к примеру, DOWN_HL уже неактуальна?
Как минимум, эту функцию неплохо оптимизировали (https://hype.retroscene.org/blog/dev/1047.html) по сравнению с тем, что было 40 лет назад.
Как минимум, эту функцию неплохо оптимизировали (https://hype.retroscene.org/blog/dev/1047.html) по сравнению с тем, что было 40 лет назад.
Ну, так она теперь не DOWN_HL?
Bedazzle
06.11.2021, 22:26
Ну, так она теперь не DOWN_HL?
Речь только лишь о
Прогре́сс, проградация (лат. pro — движение вперёд, успех; gradĭ — шагать, ступать; gradatio — постепенное повышение) — направление развития от низшего к высшему, положительная динамика, поступательное движение вперед.
Код можно оптимизировать сколько угодно, на то он и код.
А для программиста на Спектруме что изменилось за сорок лет? Частота процессора? Объем памяти? Способ адресации видео?
p.s.
Нексты, пентевы и прочие тс-конфиги - это не спектрумы.
какой именно у ZX-Spectrum произошёл "технологический процесс" за 40 лет?
ну как минимум средства разработки/отладки стали гораздо быстрее/удобнее.
полезность zx48+магнитофон я не отрицаю, но некоторые задачи теперь решаются парой кликов, а не часами
средства разработки/отладки стали гораздо быстрее/удобнее
Ну а заслуга Спектрума тут в чём?
автор фразы скорее всего имел ввиду что изменились носители информации и контроллеры для доступа к ней,
в связи с этим работа с реальным магнитофоном утратила актуальность
alex8418
07.11.2021, 10:38
автор фразы скорее всего имел ввиду что изменились носители информации и контроллеры для доступа к ней,
в связи с этим работа с реальным магнитофоном утратила актуальность
goodboy и все остальные пользователи спасибо за ответы! Но по поводу неугомонно растущего технологического прогресса - Вы не угадали! Я имел ввиду, что на данных момент существуют мощные 64 битные компьютеры на базе IBM PC (с каждым годом появляются всё более и более мощные процессоры, увеличивается объём оперативной памяти и размеры носителей информации - этот процесс идёт постоянно), которые за счёт своей мощности позволяют решать более серьёзные задачи, чем нежели создание модифицированного загрузчика ld-bytes и т.д. и т.п.! 99,5% публики ZX SPECTRUM в масштабе всей страны приходилась на 1990-е годы, когда просто других компьютеров в Нашей стране не было в таком количестве, а сейчас случился спад из-за прогресса, что собственно говоря и естественно! На форуме остались только фанаты ZX SPECTRUM и интересующиеся, на которых как некоторые говорили тогда игрушка, произвела впечатление в те самые 1990-е и поэтому часть людей писали и программы и демонстралки и что только не писали!
Но мой вопрос заключался в другом, нужен ли топик под названием: Программирование в машинном коде и на ассемблере (для чайников)?
Black Cat / Era CG
07.11.2021, 16:29
Но мой вопрос заключался в другом, нужен ли топик под названием: Программирование в машинном коде и на ассемблере (для чайников)?
Нужен. Если речь пойдет о современной кросс-разработке :)
Нексты, пентевы и прочие тс-конфиги - это не спектрумы.
Ну хоть кто-то в открытую это признал.
нужен ли топик под названием: Программирование в машинном коде и на ассемблере
Как уже ответил Блэк Кэт - разве что для ленивых писишников, коим тяжело что-то делать на реальном Спектруме.
Настоящие спектрумисты молча кодят в Аласме/Засме/чем там еще и не жалуются на неудобства =))
Black Cat / Era CG
07.11.2021, 17:20
Настоящие спектрумисты молча кодят в Аласме/Засме/чем там еще и не жалуются на неудобства =))Где эти настоящие спектрумисты и их софты? И еще Медноногов он как, настоящий, или поддельный?
Где эти настоящие спектрумисты и их софты?
Да нигде, вымерли уже, как класс. Остались одни "кроссплатформерщики".
Медноногов он как, настоящий, или поддельный?
Во времена создания НЛО и ЧВ такими возможностями, как сейчас, Спектрумы (железные) не обладали.
Да и явную конверсию графики с PC я бы не назвал подделкой, оно лишь пошло на пользу.
Медноногов он как, настоящий, или поддельный?
первое НЛО написано на Gense (куча небольших программ), а дальше он уже сменил ориентацию
Ну хоть кто-то в открытую это признал.
А чего уж тут не признать... это совсем другие машины - просто они умеют, с разной степенью верности, эмулировать Спектрум, в том числе.
alex8418
08.11.2021, 01:41
Нужен. Если речь пойдет о современной кросс-разработке :)
А вот хрен там, статья будет для человека у которого завалялся на полочке Пентагон старый или Ленинград даже! Подключив Пентагон (Ленинград) к телевизору, он захотел ощутить себя звездой программирования в ассемблере и как я на COVID-ной изоляции попробовав, понял чтобы модернизировать загрузчик на ZX Spectrum нужно потратить как минимум месяц времени, чтобы догадаться что нужно менять в не реллоцируемом загрузчике! И не раз пытавшись разлить горячий кофе на свой старый ноутбук! В помощь только одна хорошая программа на IBM PC, которая ускоряет процесс набора программы BasinC ver. 1.69 с сайта https://vtrd.in/!
Black Cat / Era CG
08.11.2021, 01:44
Тогда мне не интересно)))
alex8418
08.11.2021, 02:11
Тогда мне не интересно)))
Вот Вы с Бердска ребята капризные, Вы бы мне лучше кинематическую схему магнитофона Нота 203 Бердского электромеханического завода прислали, а то не крутит катушки и всё, и ещё зараза не записывал на ленту с самого его производства (что делать, магнитная лента Свема?)!
- - - Добавлено - - -
И почему я постоянно слушал на этом магнитофоне Modern Talking - альбом Let’s Talk About Love???
Black Cat / Era CG
08.11.2021, 02:23
Вот Вы с Бердска ребята капризныеНу мое мнение, что либо шашечки, либо ехать. Те, кому надо шашечки, уже сидят и наслаждаются процессом в аласмах, тасмах и ксасах. Не уверен, что им нужна подобная статья, потому что их цель это процесс, причем именно такой, к которому у них теплые и ностальгические чувства. А тем, кому ехать, тем важнее конечная цель, то есть написать софтину под спек, используя самые оптимальные современные средства разработки. Вот им такая статья бы зашла, знаю точно. В генсе я сидел, щас на сжасме какую-нибудь хелловролдину написать смогу, а вот написать что-то стоящее не вытяну. Так что скорее я ваще не про себя.
Вы бы мне лучше кинематическую схему магнитофона Нота 203 Бердского электромеханического завода прислали, а то не крутит катушки и всё, и ещё зараза не записывал на ленту с самого его производства (что делать, магнитная лента Свема?)!Ну если оно еще и существует где-то (что не факт), то я уж точно не знаю где :(
andreysur
08.11.2021, 21:46
Посмотрите информацию по этой ссылке - http://www.rw6ase.narod.ru/00/mg_kat_/nota202_203.html
блин, у нас в семье был такой магнитофон и первые игры для спека как раз записывались/запускались с него.
(кассет было мало, а катушек много)
вспоминаю что я ухитрился потерять прижимную пластину под головкой.
на чтение это особо не влияло, а для записи было критично.
папа потом сделал некое подобие из бронзовой пластинки + фетр
И еще Медноногов он как, настоящий, или поддельный?
Вроде как настоящий
Black Cat / Era CG
08.11.2021, 22:21
Вроде как настоящийНу просто он при написании своих игр последних как-то не особо стремался использовать кросс-ассемблер самописный под дос. Понимал вполне, что это намного удобнее и избавляет от кучи лишнего геморроя. Щас у всех есть ПК с виндой или пингвином, поэтому писать в православных олдовых асмах -- это просто ностальгическое удовольствие, либо сильная привычка. Не более.
andreysur
08.11.2021, 22:21
alex8418, Кинематика магнитофона очень простая - перемотка сделана на шкивах. Надо почистить и смазать оси шкивов, протереть резиновые поверхности шкивов, заменить пассики, проверить - не блокируются ли тормоза. По поводу записи - надо сначала заменить универсальную головку, износ поверхности прямо влияет на качество записи.
вспомнил и нашёл загрузчик с очень крутым способом вывода картинки http://spectrum4ever.org/download.php?t=fulltape&id=3683
(браузер может ругаться на http)
Bedazzle
09.11.2021, 00:38
вспомнил и нашёл загрузчик с очень крутым способом вывода картинки
Офигенно!
- - - Добавлено - - -
В помощь только одна хорошая программа на IBM PC, которая ускоряет процесс набора программы BasinC ver. 1.69
Обновляемся на https://arda.kisafilm.org/blog/?p=1358&lang=en
или даже так, 1.78 (https://arda.kisafilm.org/fish/get/serve.php?b=BasinC178.zip&d=13&s=scuk)
Тоже была мысль написать загрузчик прикольный... Вопрос в чем, я не разбирался как они работают, вроде как нужно уложить свой код в определённое "окно" по тактам, вместо стандартной задержки. Этот код он точно по тактам считается или есть какой диапазон допуска?
Тоже была мысль написать загрузчик прикольный... Вопрос в чем, я не разбирался как они работают, вроде как нужно уложить свой код в определённое "окно" по тактам, вместо стандартной задержки. Этот код он точно по тактам считается или есть какой диапазон допуска?
а) Если писать загрузчик правильно, то никакой "стандартной задержки" быть не должно. Задержка, а точнее -- длительность импульса должна измеряться по настроечной последовательности.
б) В процедуру настройки длительности вставляешь код, который исполняется столько же, сколько рисование, но на самом деле ничего не делает. Можно рисовать куда-нибудь в память, например. Тогда всё откалибруется само.
Тоже была мысль написать загрузчик прикольный... Вопрос в чем, я не разбирался как они работают, вроде как нужно уложить свой код в определённое "окно" по тактам, вместо стандартной задержки. Этот код он точно по тактам считается или есть какой диапазон допуска?
там есть холостой цикл который выполняется каждый бит. вот его то и заменяют
Ещё недавно наткнулся на загрузчик Frank-74/47loader (https://github.com/Frank-74/47loader). Там автор экспериментирует со многими эффектами типа линейной загрузки экрана, загрузки в обратную сторону, даже взад-вперёд, но они все уже где-то встречались.
Что мне бросилось в глаза, так это что в одном из вариантов при загрузке используются три цвета, причём каждый из цветов «чернил» на бордюре остаётся более-менее на своём месте (см. картинку). Не припомню, чтобы я такое видел «в дикой природе».
Ну и вообще код хорошо структурирован и написан аккуратно — приятно читать и изучать.
автор экспериментирует со многими эффектами типа линейной загрузки экрана, загрузки в обратную сторону, даже взад-вперёд
а видосики примеров где-то есть?)
Видосиков нет, но в репозитории есть TZX.
загрузка с AYмузыкой
Intense тоже написали загрузчик с AY - Presto Loader (https://intenseofficial.blogspot.com/2017/07/presto-ay-music-loader.html).
https://www.youtube.com/watch?v=LYKPJViWQ9g
Ха! В Ping-Pong тоже Presto Loader, но V2, судя по всему.
cafedead
09.01.2026, 00:57
По-моему, тут самые прикольные загрузчики:
83569 кастомный турбо-загрузчик с загрузкой блока с одновременной подгрузкой картинок в виде текста и счетчиком;
83570 кастомный турбо-загрузчик с загрузкой блока с одновременной подгрузкой картинок, но без счетчика... но картинок реально дохрена, всю предысторию рассказали.
Одновременно, тут и блоки просто огромные, это как защита используется, т.е. вы не сможете так просто это скопировать просто из-за размера блока.
Ну и становится очевидным, что для того, чтобы изготовить такие блоки, вам нужен компьютер с БОЛЬШИМ объемом памяти, чем Спектрум 48К... Вам ведь это все слепить нужно вместе с самой игрой. Либо игра должна быть меньше, чтобы вместить дополнительно ваш редактор, и картинки, а значит и ПО ваше должно быть компактным. Возможно, ДАЖЕ, у вас должна быть КАСТОМНАЯ ПРОЦЕДУРА ЗАПИСИ, ну это так, возможно, с упаковкой/распаковкой данных налету на сдачу. Отсюда, мне не вполне понятен бравый настрой топикстартера, чего он вообще ожидал. Что ему тут на блюдечке с голубой каемочкой дадут готовое решение? Ну, друг, это надо сборщик бандла сделать, с редактором, в котором вы будете редактировать, в какой последовательности вы хотите картинки изображать, и какие картинки, предварительно загрузив их. Чтобы данный комплекс мероприятий организовать, ВЫ должны уметь программировать, и на вполне хорошем уровне.
Приведенный топикстартером в примере BobbyBearing - из той же серии. Это турбо-загрузчик с кастомной загрузкой картинки, довольно стильной, со счетчиком. Да, их фишечка - это вот такие более сложные последовательности. Вот целый, как видите, набор утилит от авторов данного бандла. Тут уровень сильно выше среднего даже без скроллинга, а тут еще и он. С чего вы взяли, что вам надо будет всего пару кнопок нажать, или код с гитхаба скопировать?
Вам дали код счетчика... Но, вообще-то, написать счетчик - самое сложное было в этой поставленной задаче, как по мне. Кастомную загрузку картинок сделать куда проще, чем счетчик. Но придется сделать также и редактор со сборщиком, как я и сказал. Суть вы понимаете, как это сделано, вам просто нужно по-своему менять адрес ячеек, в которые вы грузите поступающие данные. Либо заранее прописать карту изменения адресов в загрузчике, либо использовать входящие данные. Далее творите что-угодно на свой вкус, на что фантазии хватит, ну и вашего скилла программиста. Я редактор вообще на бейсике написал в свое время. Ну тут совершенно бессмысленно пялиться в журналы, и искать готовые решения. Вы уже все посмотрели, там и тут вам вполне хорошую основу дали, у меня столько не было, у Hewson'а - тем более. Теперь пора проявить себя, свои настойчивость, упорство, ум, логику.
Лично для меня было некоторой сложностью написать код счетчика. Сначала тоже хотел отреверсить готовые решения, а потом подумал... Да какого хрена? Я что, тупее этих ребяток? Которые и сами копируют все друг у друга?! Нет. Я и сам лучше могу написать. Да и лень было вникать, что они там накуралесили. И написал, не сломался. Тем более, тут чуть более сложная задача стояла, написать его, отображая сразу на двух экранах 128-го, чтобы полосы бегали по всему экрану, а не только на рамке. И по высоте каждая цифра у меня по два знакоместа занимает, а не по одному, ну там незначительные изменения. Ну вот и топикстартеру предлагаю не лениться, а начать вникать, что происходит в коде, тут придется думать, и проявить немного творчества и фантазии. Ну или бросить эту затею. Ну он, вроде бы, и бросил уже. Хотя за это время мог уже такие загрузчики научиться делать, что мы бы все умерли от зависти.
ГЕНС, или не ГЕНС - тут роли уже вообще не играет. Топикстартеру эти страдания никак не помогут. Толку от того, что вы будете сидеть страдать на ГЕНСе- никакого. Чтобы стать круче, как те самые крутые старички, вам надо не просто на ГЕНСе сидеть страдать, а еще и с кассеты этот ГЕНС загружать, а потом исходный код в него грузить, и сохранять на кассету перед запуском. И потом, когда ошибетесь в коде, и у вас все наглухо зависнет, по новой все несколько минут грузить. Так да, вы научитесь писать код, не допуская ошибок в логике, ну или завяжете с этой деятельностью. А если ошибка, которую не можете отследить, тогда еще и МОНС грузить. -) Ах, Интернета не было, и книжек не завезли? Ну тогда реверсить, реверсить, и еще раз реверсить. А вы как хотели? Вот так все и учились в наше время, и становились круче, аж пафос лился из всех щелей. Ну пока-что я не вижу что-то со стороны топикстартера желания разбираться в том, что он вообще пишет, а значит это все лишено всякого смысла.
Сам я на ГЕНСе 3 попробовал свои тесты писать по старой памяти, но быстро отказался от этой затеи. Я конечно люблю тоже вспомнить былое, но сегодня это реально уже извращение какое-то для мазохистов. Как я на этой топорной херне что-то делал когда-то, даже не представляю. Как-то делал. Потому что до этого и вовсе машинный код алгоритмов сжатия в десятичной форме в бейсике вбивал, составляя его в тетрадке, потому ГЕНС 3 в тот момент показался просто сказочным, всю жизнь о нем мечтал. Но, благо, теперь мне это страдание и не нужно, я уже крутой. -)) И спасибо ГЕНСу большое за свой вклад в это. -)
Если ТС реально настроен пройти через эту боль, некоторый смысл в этом все же есть. Но будет больно. Это не прогулка в парке, где ты попил кофе, стал супердедом, и все тебя зауважали. Навыки вырабатываются через боль, и так во всем.
- - - Добавлено - - -
вспомнил и нашёл загрузчик с очень крутым способом вывода картинки http://spectrum4ever.org/download.php?t=fulltape&id=3683
(браузер может ругаться на http)
Действительно оригинально... Мне не очень нравится идея скроллить весь экран, как-то медленно это, но если загрузку небольших областей экрана совместить со скроллингом этих небольших областей, получилось бы стильно. И понравился счетчик с точностью до байта.
- - - Добавлено - - -
(пытался убрать LD A,C CPL LD C,A LD (#5AFE),A LD (#5AFF),A, но программа виснет)!
Ну конечно виснет. Вам же надо инвертировать значение в регистре C, а вы это зачем-то стерли... Запись в ячейки стирайте на здоровье, это и отображало то, что в рамку идет, но на экране в атрибуты... Но инвертировать-то C нужно ЗАГРУЗЧИКУ не для отображения. Ну не только. Изменение цвета рамки - побочный эффект.
Впрочем, пожалуй, я действительно излишне суров с вами. Я обратил внимание, что в исходнике, что вам дали, ну совершенно нет комментариев к тому, что происходит в коде. Это странно. У меня в книжке около каждой строчки процедур загрузки и записи были комментарии. Вам нужно такое поискать. Понимание здесь просто необходимо, чтобы вы могли сделать то, что хотели.
- - - Добавлено - - -
Мне интересен процесс написания этой программы первопроходцами, а именно Newson-ом, у них же не было эмуляторов, я загрузчики защищенные при этом они писали! Как?
Ну да, как-то писали, но точно не так, как вы. Засучивали рукава, и делали ряд продуктов для достижения цели, разбивали большую цель на малые и их достигали, в итоге получилось то, что вам так понравилось. В этом вообще-то и весь прикол был. А вы это все утратили, вы ленитесь, хотите все готовое получить, и сразу, зайдя на гитхаб, взяв опенсорс, заскочив в тему с двух ног, при этом ничего ни о чем не зная, будто вам кто-то чем-то обязан. Поэтому я и говорю, что опенсорс - это раковая опухоль индустрии. И вот эти ленточные загрузчики, пожалуй, последнее место, куда вы с этими своими метастазами не долезли, чему я искренне рад. Эдакое заповедное место. Хотя тоже упорно постят зачем-то на гитхабе свои загрузчики.
Ну я не понимаю вас. Вы не последовательны. Сначала вам интересны страдания, а потом взяли, все скопировали. Или ищете все готовое в журнале. Тем же HEWSON, например, никто ничего не рассказывал в журналах. Видимо, своих компетенций хватило, чтобы сделать, своего таланта. Вот и думайте. У них компетенций хватило, у меня хватило, а у вас... Ну вы не дожали тему. Счетчик срисовали, кастомную загрузку картинок не сделали. Неприятно? Сочувствую. Но в чем я не прав? Я вовсе не хочу вас обижать, мне нравится, что вас эта тема заинтересовала, но вот то, что вы пишете, как к этому относитесь... Ну лично у меня сгорела задница из-за этого. Потом скажете, что вот мол тут токсики. Ну а как я должен к этому относиться?
И ничего HEWSON не защищали. Все доступно было у них. Порой, ломанные загрузчики Билла Гилберта были круче защищены. Заксорит все сто раз, и сидишь колупаешься с этим. Пишешь свои приблуды, чтобы это побыстрому вскрыть.
И... ДЖей, ДЖей, ДЖЕйсон!!! А не ЙЕ, ЙЕ, ЙЕйсон. -))
статья будет для человека у которого завалялся на полочке Пентагон старый или Ленинград даже! Подключив Пентагон (Ленинград) к телевизору, он захотел ощутить себя звездой программирования в ассемблере
Ну это ведь будет самообманом. Чтобы стать звездой программирования в ассемблере, нужно научиться программировать на ассемблере и, внезапно, программировать на ассемблере. Я себя ощущаю звездой программирования на ассемблере, потому что у меня свой код везде, включая лоадер. А у вас - ворованный код счетчика HEWSONа даже без малейших изменений. Ненавижу ленивых беспомощных и бесполезных опенсорсеров как раз за то, что они пускают всем пыль в глаза, и чувствуют себя звездами, не имея ничего за душой. Но у вас это даже не опенсорс, если что.
- - - Добавлено - - -
обычное дело. код размещается после REM
В область переменных круче.
- - - Добавлено - - -
Вопрос в чем, я не разбирался как они работают, вроде как нужно уложить свой код в определённое "окно" по тактам, вместо стандартной задержки. Этот код он точно по тактам считается или есть какой диапазон допуска?
По тактам считается. Код вписывается вместо цикла для ожидания стабилизации порта. Если вставить код меньшего по тактам размера, то нужно оставить необходимое количество итераций этого цикла, а если большего - то его нужно удалить вообще, и придется поправлять другие тайминги с учетом изменившихся обстоятельств. Если забить на это дело, то интервалы начнут гулять, и стабильность чтения снизится, сократится потенциал для загрузки турбо-блоков, более быстрые блоки могут перестать грузиться, т.к. вот это дрожание интервалов начнет переваливаться за границу итераций между нулем и единицей.
- - - Добавлено - - -
а) Если писать загрузчик правильно, то никакой "стандартной задержки" быть не должно. Задержка, а точнее -- длительность импульса должна измеряться по настроечной последовательности.
Понятия не имею, что вы имеете в виду под "правильно". Стандартная задержка там из-за того, что код этот выполняется, когда волна находится в своем среднем состоянии, когда порт может как бы дребезжать, т.е. у вас состояние порта изменилось, сработал выход из цикла, посчитано количество итераций, получили 0 или 1, возможно, даже записали байт, а затем сюда же вернулись, но слишком быстро, волна не особо далеко ушла за это время, порт не успел стабилизироваться и в этом состоянии может снова измениться, а потом снова. Вот чтобы не сработал ложный выход из следующего цикла раньше времени, в котором мы уже будем считать итерации, чтобы понять, 0 приходит, или 1, используется цикл с небольшой фиксированной задержкой, чтобы волна сигнала успела уйти от этого нестабильного состояния порта. Его и заменяют на более полезные действия с циферками счетчика. На эмуляторе, понятное дело, мусора во входном сигнале не будет, сигнал приходит всегда чистым, но на реальном оборудовании - вполне может быть такой дребезг, и вы попросту будете ловить ошибки чтения, если у вас этой задержки не будет. Допускаю, что у вас какой-то другой алгоритм работы, но вы этим здесь скорее запутаете людей, чем поможете, поскольку здесь речь идет о кастомизации стандартной процедуры загрузки, и все в основном ее и кастомизируют. Ну не хватает некоторого контекста к вашим словам. Не исключено, что цикл этот можно поджать, рассчитывая на более качественное современное оборудование, но тогда другие тайминги придется подгонять. Да и зачем?! Исследования на реальном оборудовании с разными магнитофонами вы вряд ли проводили, это явный путь к снижению надежности, поэтому я скорее доверюсь компании Синклера, прописавшей вот именно такой код именно в этой части.
загрузка с AYмузыкой
С технической точки зрения - очень круто сделано. Но с художественной - бесполезная фигня и издевательство. Для чего? Биперный звук загрузки мешает музыке.
С технической точки зрения - очень круто сделано. Но с художественной - бесполезная фигня и издевательство. Для чего? Биперный звук загрузки мешает музыке.
кассета обычно пищит не туда куда АУ.
кассета обычно пищит не туда куда АУ.
В пентагоне или тостраке для AY отдельный выход? Или звук магнитофона регулируется как-то, а не идет через сопротивление на динамик?
Serg6845
10.01.2026, 14:13
В пентагоне или тостраке для AY отдельный выход? Или звук магнитофона регулируется как-то, а не идет через сопротивление на динамик?
выход на магнитофон и выход на бипер - это разные выходы. как минимум в клонах. зачем выход на магнитофон подавать на динамик?
AY если и замешиваеть, то с выходом на бипер.
В пентагоне или тостраке для AY отдельный выход? Или звук магнитофона регулируется как-то, а не идет через сопротивление на динамик?
у меня был выход на колонки отдельный.
Dart Alver
11.01.2026, 15:08
Но с художественной - бесполезная фигня и издевательство. Для чего? Биперный звук загрузки мешает музыке.
Насколько помню магнитофон вообще никаким образом не подавал звук на динамик бипера, да и динамика как такового в 48-х спеках обычно не было а был капсуль, а с AY тем более магнитофон не был никак не связан.
Пищал сам магнитофон своим динамиком, вырубишь звук - не пищит, но привычнее было громкость убавить и пусть пищит - как контроль, что всё грузится нормально. ))
А в эмуляторах магнитофона нет, вот и прилетает в одной куче со всем. Да ещё и вырубить или громкость убавить как в магнитофоне нифига нельзя (Привет разработчики). ))
Что вы все несёте? Во всех фирменных моделях, выход кассетника, выход динамика, и выход AY - один и тот же выход. И кассета пищит туда же, куда и AY. Сделано это очевидно для того, чтобы не городить несколько динамиков. Что касается отечественных клонов, например, Пентагона, то в классическом Пентагоне, на плате, никакого AY вообще внезапно не было. А отдельные платки с AY - тут уже колхозили кто во что горазд. И не нужно свою конструкцию называть "обычно". У меня было всё соединено в один выход. Зачем несколько динамиков?
SoftLight
11.01.2026, 16:17
выход на магнитофон и выход на бипер - это разные выходы. как минимум в клонах. зачем выход на магнитофон подавать на динамик?
AY если и замешиваеть, то с выходом на бипер.
Есть пара-тройка игр где на выход магнитофона подаются ударные при проигрывании основной мелодии через бипер. Звучит прикольно.
cafedead
11.01.2026, 16:20
Во всех фирменных моделях, выход кассетника, выход динамика, и выход AY - один и тот же выход. И кассета пищит туда же, куда и AY.
Вход "пищит" в магнитофоне при воспроизведении кассеты, или не пищит, если убавили громкость магнитофона... В Спектруме он не пищит. Ну может быть было исключение для вариантов со встроенным в клавиатуру кассетником.
Выход - "пищит" в выход на магнитофон, возможно, в магнитофоне будет слышно, если нажали запись. Но вряд ли этот вывод идет в общий вывод звука любого Спектрума. МОжет быть и бывает, но я никогда не видел. Опять же, если встроенный в клавиатуру кассетник у фирменной модели, может пищать, но в остальных случаях в этом нет смысла.
А что, у всех тут фирменные модели? Я такое видел только на картинках в Ебее.
У меня было всё соединено в один выход.
У вас AY и бипер может быть и соединены в один выход. Но магнитофонный вывод - вряд ли. Магнитофонный ввод... у меня не был соединен.
в классическом Пентагоне, на плате, никакого AY вообще внезапно не было. А отдельные платки с AY - тут уже колхозили кто во что горазд
Да, у меня тоже на плате Пентагона AY висел в виде платы, припаянной к ногам Z80.
Музыка AY во время загрузки - по-моему, хрень полная... Но право на существование имеет, конечно. Добавить это в лоадер... Ну смотря какой сложности мелодия и проработка звука... Может быть просто, может быть сложно. Зависит от сложности исполняемой композиции. На мой взгляд, счетчик, сложная прорисовка заставки и турбо-загрузка - поинтереснее, чем AY-музыка. Сорямба, если кого задело, но я вообще не перевариваю звучание AY, у меня кровь течет из ушей от его звука, поэтому мое мнение может быть предвзятым. Когда я впервые услышал, как заиграли игры, присоединив AY, мне захотелось, чтобы они поскорее снова заткнулись... -) Лучше уж звуки магнитофонной загрузки слушать, чем это.
Dart Alver
11.01.2026, 17:01
Что вы все несёте? Во всех фирменных моделях, выход кассетника, выход динамика, и выход AY - один и тот же выход. И кассета пищит туда же, куда и AY. Сделано это очевидно для того, чтобы не городить несколько динамиков.
Вы имеете ввиду амстрадовские модели +2, +2A и возможно клоны со встроенным магнитофоном ? Да наверно для них так и было. Но там, где магнитофон не прибит гвоздями, то нифига подобного.
Подпрограмма чтения с ленты в ПЗУ не выводит звука на бипер.
Powered by vBulletin® Version 4.2.5 Copyright © 2026 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot