Страница 1 из 1

расовый загрузчик демо.

Добавлено: 29 май 2018, 13:32
shiny
Оставлю тут заготовку(ужясм).

Код: Выделить всё

;-----------------------------------------------------------
 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 поправит.

Добавлено: 29 май 2018, 17:47
grach
до сих пор плаваю в трдосе - делаю через опу. кассетное детство даёт о себе знать :)

Добавлено: 29 май 2018, 17:52
shiny
ога. я глянул на твои кусочки из памяти и офигел слегка. Тут гораздо проще, главное не заблудиться в страницах.

Добавлено: 29 май 2018, 22:38
krt17
Шыншыл писал(а):Пущай krt17 поправит
Я уж заебся поправлять, хозяин барин, делай как завещал интроспек. Я тут зачем то сделал загрузчик через стек, типо компактно, только грузить нечего :) Очень меня забавляли потуги с уютного на энцати страницах, чем там закончился этот пиздец?

Добавлено: 30 май 2018, 06:05
shiny
нинай о чом ты.

Добавлено: 28 окт 2019, 19:49
Random Great
grach 55110 писал(а):до сих пор плаваю в трдосе - делаю через опу. кассетное детство даёт о себе знать :)
а как через tap расово грузить в разные области памяти 128к?

Добавлено: 28 окт 2019, 20:12
shiny
мляяя

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

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

Добавлено: 28 окт 2019, 20:13
shiny
krt17 55131 писал(а):
Шыншыл писал(а):Пущай krt17 поправит
Я уж заебся поправлять, хозяин барин, делай как завещал интроспек. Я тут зачем то сделал загрузчик через стек, типо компактно, только грузить нечего :) Очень меня забавляли потуги с уютного на энцати страницах, чем там закончился этот пиздец?
нашел скриншотик
Изображение

Добавлено: 28 окт 2019, 20:29
Random Great
Шыншыл 75377 писал(а):мляяя
32 out 32765,16:poke 23388,16:pause 1
конфигурацию порта 7FFD знаешь?
Ага, cтраницы понятно как переключать. Вопрос как через код без использования интерпретатора BASIC загрузить несколько файлов с ленты в разные банки памяти. Аналогично trd-загрузчику...

Добавлено: 28 окт 2019, 20:52
shiny
https://zxpress.ru/book_articles.php?id=2184

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

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

Добавлено: 28 окт 2019, 21:11
kalantaj
Random Great 75373 писал(а):
grach 55110 писал(а):до сих пор плаваю в трдосе - делаю через опу. кассетное детство даёт о себе знать :)
а как через tap расово грузить в разные области памяти 128к?
Ты имеешь ввиду один файл и чтоб на ходу переключал страницы и грузил сразу в разные страницы?
Или отдельными файлами в разные страницы?

Добавлено: 29 окт 2019, 08:20
Random Great
kalantaj 75383 писал(а):Ты имеешь ввиду один файл и чтоб на ходу переключал страницы и грузил сразу в разные страницы?
Или отдельными файлами в разные страницы?
Как в trd, там отдельные файлы в разные страницы.

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

Добавлено: 29 окт 2019, 22:47
GoodBoy
Random Great 75373 писал(а):а как через tap расово грузить в разные области памяти 128к?
как вариант - грузить в нижнюю память (хоть 32768,16384), а после пересылать на нужную страницу.

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

Добавлено: 31 окт 2019, 11:12
Random Great
Например загрузить сжатый zx7 файл в #8000 а потом переключить #C000 в нужную страницу и распаковать его туда.

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

Добавлено: 31 окт 2019, 11:33
shiny
Блок нужно отдельно компилировать и собирать в тапку.

Добавлено: 10 ноя 2019, 22:25
Random Great
внутри модуля boot, насколько я понимаю, нельзя использовать jp и call <метка>?

Добавлено: 11 ноя 2019, 00:09
kalantaj
Ты о каком вообще модуле boot говоришь?

Добавлено: 11 ноя 2019, 01:54
Random Great
kalantaj 76551 писал(а):Ты о каком вообще модуле boot говоришь?
Который в начале темы -

Код: Выделить всё

 MODULE boot
Basic:
 db #00,#01;номер строки
...
Область загрузки BASIC-программы может меняться, поэтому внутри кода в REM нельзя использовать команды перехода по адресу на метку внутри загрузчика, они будут неправильно скомпилированы sjasm.

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

Добавлено: 11 ноя 2019, 06:48
shiny
JR в помощь. или компилируешь код отдельно, и грузи его.

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

Добавлено: 11 ноя 2019, 07:32
kalantaj
После старта кодов в BC находится адрес старта. Используя его можно LDIRнуть свой код в нужный адрес и выполнять его там.

Добавлено: 11 ноя 2019, 08:43
shiny
kalantaj 76604 писал(а):Но даже если подключено что то ещё, что двинет ещё дальше бейсик, в приведенном в первом посте модуле код стартует в независимости от положения самого бейсика. Берется из системных переменных информация о текущем начале бейсик программы и смещение кодов относительно начала бейсика (5 байт)
Хех, я так извращался с (23635) в кректрах для патча