чоооорд, еще один косяк - загрузчик-бейсик не пишется как сектор:(
Вид для печати
чоооорд, еще один косяк - загрузчик-бейсик не пишется как сектор:(
denpopov, а вот так?
Это для кассеты, но можна же и для диска сделать?Код:DEVICE ZXSPECTRUM128
org #6000
header_beg
db #00 ;command byte
db #00
db "l'Abbaye "
dw bas_end-bas_beg ;full lenght
dw #000a ;autostart
dw #0028 ;lenght without vars
header_end
; print usr (peek val "23627"+val "256"*peek val "23628"+val "3")
; 34b3 usr
data_beg
db #ff
bas_beg
db #00,#0a ;10
dw #0024 ;¤«Ё** бва®ЄЁp
db #f5,#c0,#28,#be ;print usr (peek
db #b0,#22,#32,#33,#36,#32,#37,#22,#2b ;val "23627"+
db #b0,#22,#32,#35,#36,#22,#2a,#be ;val "256"*peek
db #b0,#22,#32,#33,#36,#32,#38,#22,#2b ;val "23628"+
db #b0,#22,#33,#22,#29,#0d ;val "3")
;(23627)
;vars
db #4c ;L
dw screen_l ;var_len
pointer
di
ld h,b
ld l,c
ld sp,hl
ld hl,end_len
add hl,bc
ld de,#ffff
ld bc,pack_len+1
lddr
inc de
ld hl,#6000
push hl
ex de,hl
include "DEC40.a80"
org $-1
block_beg
incbin "AdM_scrn.mlz"
block_end
db #80 ;endmarker
bas_end
data_end
screen_l equ bas_end-pointer
pack_len equ block_end-block_beg
end_len equ block_end-pointer
b_title
db #ff
;48k - depack to #4000
incbin "\gfx\title.scr.rec.mlz"
incbin "\gfx\info.scr.rec.mlz"
incbin "sound.bin.mlz"
incbin "Abbaye.bin.mlz"
end
data equ end-b_title
display "header:",header_beg,",",header_end-header_beg
display "loader:",data_beg,",",data_end-data_beg
display "block :",b_title,",",end-b_title
display "Free :",$,",",#10000-$
savebin "0_Abbey_header",header_beg,header_end-header_beg
savebin "1_Abbey_loader",data_beg,data_end-data_beg
savebin "2_Abbey_block",b_title,end-b_title
вот это FAR все же схавал:)
а с подсчетом контрольной суммы я напутал, и с моноблоком проблемы..Код:device zxspectrum128
macro sectors datab,datae
IF low (datae-datab)=0
db high (datae-datab)
ELSE
db (1+high (datae-datab))
ENDIF
endm
org $8000-14*2-9
scl_b:
;header_b:
db "SINCLAIR"
db 2;two! filez
;-1st
; 12345678t
db "abstractC"
dw $8000;start adres of code block
dw end-begin;size of code
sectors begin,end;db 4;sectors
;-2nd
; 12345678t
db "abstractB"
dw basic_e-basic_b-4;size of basic
dw basic_e-basic_b-4;size of basic
sectors basic_b,basic_e;db 1;sectors
;header_e:
; ORG #8000
begin
ld hl,pack,de,$6100
push de
include "zx7.a80"
pack: incbin "test.bin.zx7"
end
org $8400
basic_b:
db #00,10;номер строки
DW EndLine1 - Line1
Line1:
db $FD;clear
db $B0;val
db $22,"24575",$22,":"
db $F9;randomize
db $C0;usr
db $B0;val
db $22,"15619",$22,":"
db $EA;rem
db ":"
db $F7;run
db $22,"abstract",$22
db $AF;code
db #0D
EndLine1:
db #80;for autorun
db #AA,10,0
org $8500
basic_e:
;?checksum
scl_e:
savebin "test.scl",scl_b,scl_e-scl_b
---------- Post added at 13:41 ---------- Previous post was at 13:40 ----------
Это к интроспеку, он плодовит на сомнительные утилиты;)
FAR проглотил и это:
Код:org $8500
basic_e:
dw 0,0;checksum
scl_e:
Это не утилита - это создание блоков для тапки средствами асма.
вот такой вот батник собирал аббатство.
Цитата:
.\utils\scrrec.exe .\gfx\info.scr
.\utils\scrrec.exe .\gfx\title.scr
.\utils\scrrec.exe .\gfx\loadingabbaye.scr.rec
.\utils\MegaLZ.exe .\gfx\info.scr.rec
.\utils\MegaLZ.exe .\gfx\title.scr.rec
.\utils\sjasmplus.exe main.a80
.\utils\MegaLZ.exe Abbaye.bin
.\utils\MegaLZ.exe sound.bin
.\utils\sjasmplus.exe screen.a80
.\utils\MegaLZ.exe AdM_scrn
.\utils\sjasmplus.exe loader.a80
.\utils\savetap.exe Abbaye.tap 0_Abbey_header 1_Abbey_loader 2_Abbey_block
.\utils\TAP2TZX.EXE Abbaye.tap
del AdM_scrn
del AdM_scrn.mlz
del 0_Abbey_header
del 1_Abbey_loader
del 2_Abbey_block
del Abbaye.bin
del Abbaye.bin.mlz
del sound.bin
del sound.bin.mlz
del Abbaye.tap
pause
почти финальная:
FAR понимает подобную сборку, даже если нет контрольной суммы. С доводами Vitamin и Shadow Maker я не согласен, потому что не вижу смысла хвататься з древность спецификации формата.Код:device zxspectrum128
macro sectors datab,datae
IF low (datae-datab)=0
db high (datae-datab)
ELSE
db (1+high (datae-datab))
ENDIF
endm
org $8000-14*2-9
scl_b:
;header_b:
db "SINCLAIR"
db 2;two! filez
;-1st
; 12345678t
db "abstractC"
dw $8000;start adres of code block
dw end-begin;size of code
sectors begin,end;db 4;sectors
;-2nd
; 12345678t
db "abstractB"
dw basic_e-basic_b-4;start
dw basic_e-basic_b-4;length?
sectors basic_b,basic_e;db 1;sectors
;header_e:
; ORG #8000
begin
ld hl,pack,de,$6100
push de
include "zx7.a80"
pack: incbin "test.bin.zx7"
end
org $8400
basic_b:
db #00,10;номер строки
DW EndLine1 - Line1
Line1:
db $FD;clear
db $B0;val
db $22,"24575",$22,":"
db $F9;randomize
db $C0;usr
db $B0;val
db $22,"15619",$22,":"
db $EA;rem
db ":"
db $F7;run
db $22,"abstract",$22
db $AF;code
db #0D
EndLine1:
db #80;for autorun
db #AA,10,0
basic_e:
org $8500
dw 0,0;checksum
scl_e:
savebin "test.scl",scl_b,scl_e-scl_b
LUA я не осилил, был бы psb, то помог, наверное.
вот решение, хотя и не самое лучшее:
убрать контрольную сумму, только dw 0,0
запустить утилитку из приложения, в командной строке указывается имя файла.scl
autorun строки вроде бы работает.