обосрался - обтекай, не умеешь - впитывай
Вид для печати
обосрался - обтекай, не умеешь - впитывай
итог холивара, даже если код переключает страницы, но сохранён в сна 48, забудь о страницах, обращайся напрямик к разрабам, тут тебя обосрут, а они возможно и нет
- - - Добавлено - - -
Давай проще
Мне компиль выдал sna48
я его запускаю, он запускакется, но
в коде этого сна есть переключение страниц, которые эмуль уже не делает, ну 48 же было
- - - Добавлено - - -
уже заглушка
посмотри на свою проблему с логики автора эмуля.
зачем ему сохранять sna48 если комп находится в 128ом режиме ?
более того некоторые эмули ещё и сохраняют тип 128ой машины (фирма/пентагон)
Ну я понял. проще писать костыль
чтоб всегда было 128, я думал проблема решаема и я где-то накосячил, но в итоге гудбой не сцыунул и повёл себя как мужик)
Странный вопрос. Ты когда в меню 128 спектрума выбираешь BASIC48 у тебя же физически комп не превращается в спектрум 48к? Эмулятор эмулит конкретную модель машины. Тебе же выше минимум два раза объясняли, что когда эмулятор видит на входе sna, снятый с машины 48к, он не порт конфигурации блочит и не байты в системные переменные выставляет. Он просто считает, что для работы поднимаем эмуляцию машины 48к, где памяти выше 48к и порта конфигурации просто нет!
приветствую,
какая сейчас примерно технология работы с современными Z80 ассмеблерами и запуском бинарника на эмуляторе?
т.е например sjasmplus собирает мою helloworld программу но никакого бинарного файла не создает.
В примерах sjasmplus в файле frost10.z80 стоит макрокоманда
SAVESNA "frost10.sna",STARTF
я так понимаю что это команда для формирования полного образа памяти snapshot.
С загрузчиком? Помнится на BASIC загручик еще нужен был .
Вообщем я совершенно запутался тут , в элементарнейшем вопросе как раз для этой темы.
Я нашел несколько гайдов по настройке окружения в современных условиях, но там как то этот не расммотрен.
Буду благодарен за подсказку!
Эмуляторы вроде советуют для разработки CSpect и ZEsarUX
Я пишу на С++ и на asm писал бывало для x86 , но спектрум последний раз запускал 25 лет назад и никогда на асме не писал под него.
эмуляторы
unreal
xpeccy (иногда нужен там где не удобно отлаживать в unreal)
за CSpect не знаю
ZEsarUX - редкостное гафно
самый последний и навороченный sjasm брать тут
https://github.com/z00m128/sjasmplus/releases/
не забывать RTFM
http://z00m128.github.io/sjasmplus/documentation.html
оно формирует снапшот для эмулятора
такой вариант подходит для отладки и тестирования
загружать sna на реале не всегда возможно...
да и не принято в таком формате что то выпускать
вот те например сохранялка в tap образа ленты
с загрузчиком лежащим в rem
и который грузит кодовый блок без заголовка и запускает
может с ходу не работать
тк у меня более сложная обвязка на lua вокруг
которая будет не читаема для новичков
и пришлось много чего выкинуть
Код:
emptytap "test.tap"
org $0
basic_start
defb $00,00 ;
defw end_basic_line_0 - basic_line_0
basic_line_0
defb $EA ;REM
;загрузчик в REM
di
ld ix,$C000 ;грузим по адресу $C000
ld de,$2000 ;$2000 байт
ld a,$FF
scf
call 1366 ;процедура загрузки в ПЗУ
di
jp start ;и запускаем
defb $0D
end_basic_line_0
defb $00,10
defw end_basic_line_10 - basic_line_10
basic_line_10
defb $FD,$B0 ;CLEAR VAL
defb $22,"24575",$22
defb $3A ; :
defb $F9,$C0 ;RANDOMIZE USR
defb $28 ;(
defb "5" ;5
defb $0E,$00,$00,$05,$00,$00
defb $2B ;+
defb "256" ;256
defb $0E,$00,$00,$00,$01,$00
defb $2A ;*
defb $BE,$B0 ;PEEK VAL
defb $22,"23636",$22 ;"23636"
defb $2B ;+
defb $BE,$B0 ;PEEK VAL
defb $22,"23635",$22 ;"23635"
defb $29 ;)
defb $0D
end_basic_line_10
defb $80 ;autorun
defb $AA,10,0 ;не уверен нужны ли эти строки
basic_end
;сохраняем бейсик
savetap "test.tap",BASIC,"prog_name",$0,basic_end-basic_start,0 ;0 autorun line
;сохраняем кодовый блок без заголовка
savetap "test.tap",HEADLESS,$C000,$2000
тоже самое для создания образа диска trd
тоже может с ходу не работать
Код:
tr_dos_var_current_track_sector = $5CF4
emptytrd "test,trd"
org $0
basic_start
defb $00,00 ;
defw end_basic_line_0 - basic_line_0
basic_line_0
defb $EA ;REM
;загрузчик в REM
di
ld bc,$2005 ;грузим $20 секторов = $2000 байт
;05 режим загрузки
ld de,(tr_dos_var_current_track_sector) ;d номер трека e номер сектора
;в данном случае берем последнее положение
ld hl,$C000 ;куда грузим
im 1
call $3D13 ;стандартная точка входа в ПЗУ tr-dos
di
jp start ;запускаем то что загрузили
defb $0D
end_basic_line_0
defb $00,10
defw end_basic_line_10 - basic_line_10
basic_line_10
defb $FD,$B0 ;CLEAR VAL
defb $22,"24575",$22
defb $3A ; :
defb $F9,$C0 ;RANDOMIZE USR
defb $28 ;(
defb "5" ;5
defb $0E,$00,$00,$05,$00,$00
defb $2B ;+
defb "256" ;256
defb $0E,$00,$00,$00,$01,$00
defb $2A ;*
defb $BE,$B0 ;PEEK VAL
defb $22,"23636",$22 ;"23636"
defb $2B ;+
defb $BE,$B0 ;PEEK VAL
defb $22,"23635",$22 ;"23635"
defb $29 ;)
defb $0D
end_basic_line_10
defb $80 ;autorun
defb $AA,10,0
basic_end
;сохраняем бейсик загрузчик
savetrd "test","boot.B",$0,basic_end-basic_start ;если хотим автозапуск по run
;savetrd "test","prog.B",$0,basic_end-basic_start ;если не хотим автозапуск
;и лучше писать мелкими буквами
;тк некоторым придется вводить run "prog" ручками
;сохраняем кодовый блок
savetrd "test.trd","data.C",$C000,$2000 ;сохраняем $2000 байт начиная с адреса $C000
в принципе для начала можно сохранять и в sna
это проще всего
в начале сорца нужно указать тип машины
(да и в общем его нужно указывать для доступа ко многим полезным функциям)
в концеКод:DEVICE ZXSPECTRUM128
где start собственно стартовый адрес программы...Код:SAVESNA "test.sna",start
ну и в sna по идеи можно сохранить только
ZXSPECTRUM48
ZXSPECTRUM128
если нужно больше
нужно уже извращаться
снапшотов для больше 128К так и не изобрели до сих пор...
ну писать на C для спектрума не лучшее решение
есть у нас тут конечно писатели
но результат в конечно итоге всегда посредственный...
так что
только асм только хардкор
вот хорошая таблица по z80 асму
http://www.z80.info/zip/z80-documented.pdf
начиная с 26 страницы
все лаконично и понятно
Это конечно понятно, но если уже есть поддержка 128(и более), зачем при загрузке 48 снимка памяти и систему сразу делать 48ой? Ведь я, например имея 128к, выгружу часть памяти, соответствующую 48, в которой имеется код работы со страницами, загружу в другой 128, всё ведь нормально будет работать. Просто мне кажется, что рассматривать 48sna лучше было бы как минимальную часть памяти(поддерживаемую и теми и другими моделями), а не признак конкретно модели. Ну это такое, у разрабов эмулей своё видение, и менять никто ничего всё равно не будет.
- - - Добавлено - - -
Но там я выбираю сам, а тут мне выбора не дают.
Причём только что ещё раз посмотрел, и в эмузвине есть настройка
Ignore soft lock 48k by setting bit 5 in port 7FFD (always 128k in 128k mode),
но в данном случае она не помогает, так как эмулятор, видя 48к памяти в снапшоте, и машину делает 48. Но таки при загрузке 128 в режиме 48, он сначала спрашивает, переключить ли модель?