1

Оставлю тут заготовку(ужясм).

;-----------------------------------------------------------
 macro    sectors datab,datae

 IF low (datae-datab)=0
   db 1,5,high (datae-datab)
 ELSE
   db 1,5,(1+high (datae-datab))
 ENDIF

    endm

 MODULE boot
Basic:
 db #00,#01;номер строки
 DW EndLine1 - Line1
Line1:
 db #EA;REM
 ld sp,#5FFE

    res 4,(iy+1)
    xor a:out ($FE),a
    ld hl,$5AFF,de,$5AFe,bc,$1B00-1,(hl),0:lddr

;demo
 di
 ld de,(#5CF4)
 ld hl, #6000
 ld a,#10,bc,#7FFD:out (c),a
 sectors begin,end
 call #3d13

 di
 ld de,(#5CF4)
 ld hl, #C000
 sectors page0b,page0e
 call #3d13

 di
 ld de,(#5CF4)
 ld hl, #C000
 ld a,#11,bc,#7FFD:out (c),a
 sectors page1b,page1e
 call #3d13

 di
 ld de,(#5CF4)
 ld hl, #C000
 ld a,#13,bc,#7FFD:out (c),a
 sectors page3b,page3e
 call #3d13

 di
 ld de,(#5CF4)
 ld hl, #C000
 ld a,#14,bc,#7FFD:out (c),a
 sectors page4b,page4e
 call #3d13

 jp #6000


 db "yo,lamer!"
 db #0D
EndLine1:
 db #00,#02
 DW EndLine2 - Line2
Line2:
 db #20,#FD,#B0
 db #22,#32,#34,#35,#37,#35,#22;clear val "24575"
 db #3A; :
 db #F9,#C0,#28,#35;randomize usr (5+256*peek val "23635"+peek val "23636"
 db #0E,#00,#00,#05,#00,#00,#2B
 db #32,#35,#36
 db #0E,#00,#00,#00,#01,#00,#2A,#BE

 db #B0
 db #22,#32,#33,#36,#33,#36,#22;"23635"
 db #2B;???
 db #BE
 db #B0
 db #22,#32,#33,#36,#33,#35,#22;"23636"
 db #29,#0D;)
 db #80
 db #AA,1,0;;;;;;;;;;;;;autorun line,change program length to -4, e.g. 83-4=79
EndLine2:
EndBasic:
 ENDMODULE

    display /d,end-begin

    EMPTYTRD "dust.trd" ;create empty TRD image
  SAVETRD "dust.trd", "boot.B", boot.Basic, boot.EndBasic - boot.Basic
    SAVETRD "dust.trd","demo.C",begin,end-begin

    PAGE 0
    SAVETRD "dust.trd","pg0.C",page0b,page0e-page0b
    PAGE 1
    SAVETRD "dust.trd","pg1.C",page1b,page1e-page1b
    PAGE 3
    SAVETRD "dust.trd","pg3.C",page3b,page3e-page3b
    PAGE 4
    SAVETRD "dust.trd","pg4.C",page4b,page4e-page4b

;-----------------------------------------------------------

Код демо расположен по адресу $6000 между метками begin и end.
Данные в страничках раскиданы так:

PAGE 0
org $C000
page0b:
[тут все нужное]
page0e:


Единственное, что написано некорректно - макрос Sectors. Пущай krt17 поправит.

Ненависть- это подарок

2

до сих пор плаваю в трдосе - делаю через опу. кассетное детство даёт о себе знать smile

3

ога. я глянул на твои кусочки из памяти и офигел слегка. Тут гораздо проще, главное не заблудиться в страницах.

Ненависть- это подарок

4

Шыншыл сказал:

Пущай krt17 поправит

Я уж заебся поправлять, хозяин барин, делай как завещал интроспек. Я тут зачем то сделал загрузчик через стек, типо компактно, только грузить нечего smile Очень меня забавляли потуги с уютного на энцати страницах, чем там закончился этот пиздец?

5

нинай о чом ты.

Ненависть- это подарок

6

grach сказал:

до сих пор плаваю в трдосе - делаю через опу. кассетное детство даёт о себе знать smile

а как через tap расово грузить в разные области памяти 128к?

7

мляяя

32 out 32765,16:poke 23388,16:pause 1

конфигурацию порта 7FFD знаешь?

Ненависть- это подарок

8

krt17 сказал:
Шыншыл сказал:

Пущай krt17 поправит

Я уж заебся поправлять, хозяин барин, делай как завещал интроспек. Я тут зачем то сделал загрузчик через стек, типо компактно, только грузить нечего smile Очень меня забавляли потуги с уютного на энцати страницах, чем там закончился этот пиздец?

нашел скриншотик
https://1.bp.blogspot.com/-AFXgsOXpXd0/XZguUbSLVDI/AAAAAAAAE9A/wLzZRONj8KcESujO6_UsCzwEQQuZnWw0ACLcBGAsYHQ/s640/2016-07-21_171210.png

Ненависть- это подарок

9 (изменено: Random Great, 28.10.2019 20:34:15)

Шыншыл сказал:

мляяя
32 out 32765,16:poke 23388,16:pause 1
конфигурацию порта 7FFD знаешь?

Ага, cтраницы понятно как переключать. Вопрос как через код без использования интерпретатора BASIC загрузить несколько файлов с ленты в разные банки памяти. Аналогично trd-загрузчику...

10

https://zxpress.ru/book_articles.php?id=2184

читай процедуру 1366.

Хотя, можно и в Бейсике.
http://g0blinish.ucoz.ru/index/zx_games/0-23
исходники Fillomino

Ненависть- это подарок

11

Random Great сказал:
grach сказал:

до сих пор плаваю в трдосе - делаю через опу. кассетное детство даёт о себе знать smile

а как через tap расово грузить в разные области памяти 128к?

Ты имеешь ввиду один файл и чтоб на ходу переключал страницы и грузил сразу в разные страницы?
Или отдельными файлами в разные страницы?

12

kalantaj сказал:

Ты имеешь ввиду один файл и чтоб на ходу переключал страницы и грузил сразу в разные страницы?
Или отдельными файлами в разные страницы?

Как в trd, там отдельные файлы в разные страницы.

13

Ну так а в чём проблема?
Я думал чтоб был бейсик и один файл после него и чтоб во время загрузки этого непрерывного файла странички клацали и грузилось туда куда надо.
Отличий жеж нет считай - просто процедура загрузки не трдшная а таповская.

14

Random Great сказал:

а как через tap расово грузить в разные области памяти 128к?

как вариант - грузить в нижнюю память (хоть 32768,16384), а после пересылать на нужную страницу.

15

Та вы объясните в чем проблема то? Клацнул страницу - загрузил файл. Клацнул другую - ещё загрузил. Зачем секс с перекидками с нижней памяти?

16 (изменено: Random Great, 31.10.2019 11:15:53)

Например загрузить сжатый zx7 файл в #8000 а потом переключить #C000 в нужную страницу и распаковать его туда.

К моему удивлению некоторые пользователи спектрум-совместимых компьютеров до сих пор грузят через tap ("хочу попробовать на реале..."), а сжатый файл позволит сократить время загрузки.

17

Блок нужно отдельно компилировать и собирать в тапку.

Ненависть- это подарок

18 (изменено: Random Great, 10.11.2019 22:26:02)

внутри модуля boot, насколько я понимаю, нельзя использовать jp и call <метка>?

19

Ты о каком вообще модуле boot говоришь?

20

kalantaj сказал:

Ты о каком вообще модуле boot говоришь?

Который в начале темы -

 MODULE boot
Basic:
 db #00,#01;номер строки
...

Область загрузки BASIC-программы может меняться, поэтому внутри кода в REM нельзя использовать команды перехода по адресу на метку внутри загрузчика, они будут неправильно скомпилированы sjasm.

21

Если будешь грузить трдосом, то всегда на 112 байт будет сдвинут бейсик. ВСЕГДА. Потому если не планируешь делать какой-нить универсальный загрузчик типа с автоопределением кассета/дискета (трдос) то можешь смело делать JP и CALL внутри загрузчика.

22

JR в помощь. или компилируешь код отдельно, и грузи его.

Ненависть- это подарок

23

Но даже если подключено что то ещё, что двинет ещё дальше бейсик, в приведенном в первом посте модуле код стартует в независимости от положения самого бейсика. Берется из системных переменных информация о текущем начале бейсик программы и смещение кодов относительно начала бейсика (5 байт)

24

После старта кодов в BC находится адрес старта. Используя его можно LDIRнуть свой код в нужный адрес и выполнять его там.

25

kalantaj сказал:

Но даже если подключено что то ещё, что двинет ещё дальше бейсик, в приведенном в первом посте модуле код стартует в независимости от положения самого бейсика. Берется из системных переменных информация о текущем начале бейсик программы и смещение кодов относительно начала бейсика (5 байт)

Хех, я так извращался с (23635) в кректрах для патча

Ненависть- это подарок