User Tag List

Страница 2 из 8 ПерваяПервая 123456 ... ПоследняяПоследняя
Показано с 11 по 20 из 77

Тема: Хочу написать кассетный загрузчик похожий на Alkatraz но не совсем!!! Прикольнее!!

  1. #11

    Регистрация
    02.05.2015
    Адрес
    г. Таллин, Эстония
    Сообщений
    1,691
    Спасибо Благодарностей отдано 
    302
    Спасибо Благодарностей получено 
    223
    Поблагодарили
    159 сообщений
    Mentioned
    11 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от ^m00h^ Посмотреть сообщение
    @alex8418

    Посмотри еще на ... Heavy on the Magick,
    В ней искаропки есть обе процедуры

    turbo_loader: ; #B7EE

    turbo_saver: ; #BACD
    ...
    #BB85

    достать можно сразу после загрузки игры. После запуска в это место пишется буфер экрана, так что место затирается.
    Последний раз редактировалось Bedazzle; 29.07.2019 в 15:02.

  2. #12

    Регистрация
    15.05.2010
    Адрес
    Москва
    Сообщений
    64
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    3
    Поблагодарили
    1 сообщение
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Спасибо 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 статья Нестандартные загрузчики!
    Последний раз редактировалось alex8418; 30.07.2019 в 02:24. Причина: Ок

  3. #13

    Регистрация
    27.02.2005
    Адрес
    москва
    Сообщений
    14,292
    Записей в дневнике
    1
    Спасибо Благодарностей отдано 
    203
    Спасибо Благодарностей получено 
    1,456
    Поблагодарили
    946 сообщений
    Mentioned
    18 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от alex8418 Посмотреть сообщение
    Спасибо goodboy, но Вы понимаете, что это не СОВСЕМ то что Я спрашивал?
    действительно, какая-то дичь, а я поверил названию и посоветовал не проверив функционал.

    - - - Добавлено - - -

    Цитата Сообщение от alex8418 Посмотреть сообщение
    Тема счётчика вообще заглохла!!
    бери готовый код (он в играх от Hewson универсальный)

  4. #14

    Регистрация
    28.02.2005
    Адрес
    Москва
    Сообщений
    2,245
    Спасибо Благодарностей отдано 
    994
    Спасибо Благодарностей получено 
    616
    Поблагодарили
    334 сообщений
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    alex8418, тебе sjasm файл что-ли готовый прислать? Тут все есть про счетчик, и даже работает если набрать.

  5. #15

    Регистрация
    11.01.2006
    Адрес
    Брест/Минск
    Сообщений
    8,398
    Записей в дневнике
    4
    Спасибо Благодарностей отдано 
    188
    Спасибо Благодарностей получено 
    122
    Поблагодарили
    60 сообщений
    Mentioned
    7 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    https://zx-pk.ru/threads/9187-origin...l=1#post175264
    Последняя прога в файле под названием ARTBRUSH.
    С уважением, Александр.
    Scorpion ZS-256 Turbo+ GMX-2048
    SID-Blaster/ZX
    Музей ретрокомпьютеров в Минске!
    Здесь ничего нет => http://byteman.by
    И здесь тоже --->>> http://bytespace.by

  6. #16

    Регистрация
    27.02.2005
    Адрес
    москва
    Сообщений
    14,292
    Записей в дневнике
    1
    Спасибо Благодарностей отдано 
    203
    Спасибо Благодарностей получено 
    1,456
    Поблагодарили
    946 сообщений
    Mentioned
    18 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    в алькатразе (в отличии от бегающего квадратика) совсем другая логика работы.
    в квадратике (при кодировании) адреса сохраняются на ленту, а в алькатразе они уже внутри загрузчика,
    там похоже перед загрузкой строится карта на основании заданных участков экрана.
    на WoS есть загрузочный комплект/исходники

    ...
    я в своих дисковых версиях делал эмуляцию проявления таких экранов.
    вот нашёл/вспомнил для примера
    https://vtrd.in/gamez/s/SIDEARMZ.ZIP

  7. #16
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  8. #17

    Регистрация
    15.05.2010
    Адрес
    Москва
    Сообщений
    64
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    3
    Поблагодарили
    1 сообщение
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от SoftLight Посмотреть сообщение
    alex8418, тебе sjasm файл что-ли готовый прислать? Тут все есть про счетчик, и даже работает если набрать.
    Пытался я уже из 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

    - - - Добавлено - - -

    Цитата Сообщение от goodboy Посмотреть сообщение
    в алькатразе (в отличии от бегающего квадратика) совсем другая логика работы.
    в квадратике (при кодировании) адреса сохраняются на ленту, а в алькатразе они уже внутри загрузчика,
    там похоже перед загрузкой строится карта на основании заданных участков экрана.
    на WoS есть загрузочный комплект/исходники

    ...
    я в своих дисковых версиях делал эмуляцию проявления таких экранов.
    вот нашёл/вспомнил для примера
    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, но всё же?)

  9. #18

    Регистрация
    19.04.2019
    Адрес
    г. Сан-Хосе, США
    Сообщений
    44
    Спасибо Благодарностей отдано 
    15
    Спасибо Благодарностей получено 
    17
    Поблагодарили
    5 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    У меня есть похожий счётчик набранный (из ZX-Ревю 1995 №1).
    Вложения Вложения

    Этот пользователь поблагодарил morozov за это полезное сообщение:

    zebest(05.11.2019)

  10. #19

    Регистрация
    15.05.2010
    Адрес
    Москва
    Сообщений
    64
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    3
    Поблагодарили
    1 сообщение
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от morozov Посмотреть сообщение
    У меня есть похожий счётчик набранный (из 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

    - - - Добавлено - - -

    Сам журнал
    Вложения Вложения

  11. #20

    Регистрация
    02.05.2015
    Адрес
    г. Таллин, Эстония
    Сообщений
    1,691
    Спасибо Благодарностей отдано 
    302
    Спасибо Благодарностей получено 
    223
    Поблагодарили
    159 сообщений
    Mentioned
    11 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от alex8418 Посмотреть сообщение
    ...
    В каком ассемблере это набиралось тоже вопрос?
    ...
    Как после преобразования counter.asm в counter.bin появляется counter.tap?
    Ассемблер - pasmo.
    Тапок собирается в bas2tap.

    Цитата Сообщение от alex8418 Посмотреть сообщение
    Как убрать эту мигающую фигню рядом с счётчиком не знаю, а вместо неё сделать чтобы мелькали цветные чёрточки на бордюре во время загрузки?
    Может, начать с чего попроще для начала? К примеру, прикрутить лоадер к другой игрушке, и разобраться, где что менять для блоков разной длины и расположения в памяти?

Страница 2 из 8 ПерваяПервая 123456 ... ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Хочу написать AY плеер для демо
    от gl237man в разделе Программирование
    Ответов: 11
    Последнее: 21.01.2015, 10:35
  2. Дайте инфу по защите Alkatraz
    от bakanovse в разделе Софт
    Ответов: 8
    Последнее: 13.08.2012, 11:09
  3. Ответов: 2
    Последнее: 31.05.2012, 11:43
  4. Ищу помощи в установке загрузчика-с-кассет Alkatraz
    от aeon в разделе Программирование
    Ответов: 2
    Последнее: 19.04.2011, 01:46
  5. хочу написать эмулятор
    от Виктор в разделе Разный софт
    Ответов: 25
    Последнее: 22.04.2008, 23:50

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •