Вход

Просмотр полной версии : Запуск бесик файлов



Keeper
01.06.2010, 21:09
Нужен код для запуска бейсик файлов (для бута) Встречал два варианта: через ком строку и с использованием потрохов тыр-доса. Какой из них наименее "глючный" в плане совместимости с софтом? Может у кого нибудь есть готовый код? Основной критерий - как можно меньший объем.


Модераторы, подредактируйте название топика, плз.

GM BIT
02.06.2010, 04:54
Бейсик бута:
10 randomize usr 15619: rem: load "boot" code 25000
20 randomize usr 25000
30 randomize usr 15619: rem: run "name "

В своем буте перед выходом в строке 30 меняешь "name " на выбраный бейсик файлик, делаешь корректный выход из кода и все

ld hl,адрес выбранного имени бейсик файла
ld de,поглядеть в дебагере по какому адресу будет name
ld bc,8
ldir

Ну самый корректный способ (я так раньше делал и не заморачивался) :)

Keeper
02.06.2010, 06:00
Бейсик бута:

Уточняю, сам бут это часть прошивки ПЗУ. Но ход мыслей понятен...

---------- Post added at 05:00 ---------- Previous post was at 04:53 ----------

Код инициализации переменных взял из тыр-доса:


INIT_BASIC_VARS LD DE,#FFFF
LD (#5CB4),DE ;установка P_RAMT
LD HL,#3EAF ;адрес символов для UDG
LD BC,#A8 ;длина UDG - #A8 байтов
LD (#5F00),HL ;сохранение адреса символов для UDG
LDDR
INC DE
LD (#5C7B),DE ;установка переменной UDG
DEC DE ;следующий адрес
LD (#5CB2),DE ;установка RAMTOP
LD BC,#0540 ;установка RASP и PIP
LD (#5C38),BC
LD HL,#3C00 ;установка CHARS
LD (#5C36),HL
LD HL,(#5CB2) ;берем адрес RAMTOP
LD (HL),#3E ;признак конца стека GO SUB
DEC HL ;следующий адрес
DEC HL ;установка ERR_SP
DEC HL
LD (#5C3D),HL
LD IY,#5C3A ;установка регистра IY
LD DE,#5CB6 ;установка CHANS
LD (#5C4F),DE
LD HL,#15AF ;адрес области описателей каналов в ПЗУ бейсика
LD BC,#15 ;ее длина - #15 байт
LDIR
EXD
DEC HL ;установка DATADD
LD (#5C57),HL
INC HL ;следующий адрес
LD (#5C53),HL ;установка PROG
LD (#5C4B),HL ;установка VARS
LD (HL),#80 ;конец области
INC HL ;следующий адрес
LD (#5C59),HL ;установка E_LINE
LD (HL),#0D ;конец строки
INC HL ;следующий адрес
LD (HL),#80 ;конец области
INC HL ;следующий адрес
LD (#5C61),HL ;установка WORKSP
LD (#5C63),HL ;установка STKBOT
LD (#5C65),HL ;установка STKEND
LD A,#38 ;атрибуты экрана
LD (#5C8D),A ;установка ATTR_P
LD (#5C8F),A ;установка ATTR_T
LD (#5C48),A ;установка BORDER
LD HL,#0223 ;установка REPDEL и REPPER
LD (#5C09),HL
DEC (IY-#3A) ;клавиши не нажаты
DEC (IY-#36)
LD HL,#15C6 ;адрес таблицы STRMS в ПЗУ бейсика
LD DE,#5C10 ;адрес переменной STRMS
LD BC,#0E ;длина таблицы - #18 байта
LDIR
SET 1,(IY+1) ;открыт поток 3
CALL #0EDF ;инициализация буфера принтера и экрана
LD HL,#5C6B ;буфер принтера использовался
LD (HL),2
JP #1655 ;MAKE_ROOM

тыр-дос инициализируется через CALL #3D21

GM BIT
02.06.2010, 07:01
Deja Vu #05
http://www.zxpress.ru/article.php?id=7902 Загрузка и запуск бейсик-файлов.

Faster
02.06.2010, 08:55
Нужен код для запуска бейсик файлов (для бута) Встречал два варианта: через ком строку и с использованием потрохов тыр-доса. Какой из них наименее "глючный" в плане совместимости с софтом? Может у кого нибудь есть готовый код? Основной критерий - как можно меньший объем.

Вот, самый оптимальный вариант (в двух вариациях), имхо:



LD SP,#FF54
LD HL,#1303
PUSH HL ;включаем rom 1
LD (#5C3D),SP
RES 4,(IY+1)

; LD A,0 ;дисковод (0-A, 1-B...) (при необходимости)
; LD (#5D19),A

LD HL,LINE
LD (#5C5D),HL

; JP #3D03

LD HL,#016C
PUSH HL
JP #3D2F

LINE DB #EA,#3A,#F7,#22,"boot ",#22,#D

Prusak
05.06.2010, 16:40
А если бейсик-программа уже в памяти компьютера и системные переменные все проинициализированы, то как запустить программу с определённой строки?

Я пробовал делать запуск методом, как описано в Deja Vu #05, но он в моём случае не работает (виснет компьютер).

BYTEMAN
05.06.2010, 17:37
немного про это написано в ZX-Ревю №5/1994.