Вроде бы все понятно, и все равно запутался. Прошу разжевать, попытки прописать LOAD "2.scr" CODE 16384 в бэйсик загрузчик безуспешны) Имеется главный файл проекта Sample.a80, Code1.a80 - сама игра, 2.scr - экран заставка (лежит в этой же директории), бэйсик загрузчик boot.a80

Sample.a80

Скрытый текст



; главный файл проекта - именно он отправл¤етс¤ на компил¤цию ассемблером

DEVICE ZXSPECTRUM48 ; определ¤ет модель пам¤ти
MODULE Sample ; главный модуль называетс¤ Sample
; несколько констант, подставл¤ющихс¤ вместо их имен прикомпил¤ции
DEFINE DiskName "Sample.trd" ; им¤ образа диска, получающегос¤ прикомпил¤ции (этот файл будет запускатьс¤ bat-ником start.bat)
DEFINE BasicFileName "boot.B" ; им¤ бейсик-файла программы на образе дискеты (boot.B, чтобы запускалс¤ автоматически)
DEFINE CodeFileName "sample.C" ; им¤ кодового файла на образе дискеты
DEFINE TRDOSFileName "sample" ; им¤ кодового файла без расширени¤ (дл¤ вставки в бэйсик-загрузчик)
DEFINE CodeStart 24576 ; адрес компил¤ции (и запуска) кодового файла
EMPTYTRD DiskName ; создание (или затирание существующего) пустого образа дискеты

ORG #5d3b ; это адрес, с которого начинаетс¤ бэйсик-программа при подключенном TR_DOS
INCLUDE "boot.a80" ; включаем сюда текст модул¤ boot.a80 - текста бейсик-программы
SAVETRD DiskName, BasicFileName, boot.Basic, boot.EndBasic - boot.Basic ; запись бейсик-программы на образ дискеты

ORG CodeStart ; компил¤ци¤ кодового файла
INCLUDE "Code1.a80" ; включение текста модул¤ Code.a80 дл¤ его компил¤ции с адреса CodeStart (определ¤етс¤ директивой ORG)

CodeEnd: ; конец кода

SAVETRD DiskName, CodeFileName, CodeStart, CodeEnd - CodeStart ; запись на образ дискеты файла sample.C с откомпилированным кодом
ENDMODULE
[свернуть]


boot.a80

Скрытый текст


; этот модуль содержит бэйск-загрузчик
; поскольку SjAsm не умеет компилировать текст на бэйсике в файл, понятный ZX Spectrum,
; придется определять содержимое этого файла побайтно директивой defb (db)

MODULE boot

; коды токенов бэйсика
RANDOMIZE EQU #0f9
USR EQU #0c0
REM EQU #0ea
LOAD EQU #0ef
CODE EQU #0af
CLEAR EQU #0fd
NUMERIC EQU #0e ; символ, оределяющий 5-юайтное представление числа
ENTER EQU #0d ; код символа конца строки
PAUSE EQU #0f2
TRD_ENTRY EQU #3d03 ; адрес точки входа в ПЗУ TR-DOS (15619)


; далее формируется такая бэйсик-программа (в квадратных скобках - реальные значения числовых констант, записываемых в
; 5-байтное представление
; 1 CLEAR 0 [CodeStart - 1]: RANDOMIZE USR 0 [15619]: REM : LOAD "<TRDosFileName>" CODE
; 2 RANDOMIZE USR 0 [CodeStart]

Basic:
DB #00, #01 ; номер строки
DW EndLine1 - Line1 ; длина строки
Line1:
DB CLEAR, "0", NUMERIC, #00, #00, low (CodeStart - 1), high (CodeStart - 1), #00, ":" ; текст строки 1
DB RANDOMIZE, USR, "0", NUMERIC, #00, #00, low TRD_ENTRY, high TRD_ENTRY, #00, ":"
DB REM, ":"
DB LOAD, """
DB TRDOSFileName
DB """, CODE, ENTER
EndLine1: ; номер строки
DB #00, #02 ; длина строки
DW EndLine2 - Line2
Line2:
DB RANDOMIZE, USR, "0" ; текст строки 2
DB NUMERIC, #00, #00, low CodeStart, high CodeStart, #00, ENTER
EndLine2:
EndBasic:

ENDMODULE
[свернуть]



Заранее Благодарю!