Важная информация

User Tag List

Страница 1 из 2 12 ПоследняяПоследняя
Показано с 1 по 10 из 19

Тема: Загрузка файла по имени

  1. #1
    Guru Аватар для newart
    Регистрация
    19.01.2005
    Адрес
    Санкт-Петербург
    Сообщений
    11,440
    Спасибо Благодарностей отдано 
    192
    Спасибо Благодарностей получено 
    145
    Поблагодарили
    61 сообщений
    Mentioned
    4 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию Загрузка файла по имени

    Gogin ищет процедурку для будущего Mario:


    нужна процедура загрузки файла с диска!


    На вход:
    - HL - указатель на имя файла (9 символов) в памяти,
    - DE - адрес в памяти, куда грузить,
    На выходе:
    - в регистре C флаг ошибки или код ошибки.

    Вот типа такого:

    ld hl, filename
    ld de, #8000
    call trdos_lib.load_file

    ld a, c
    and a
    jr nz, load_failed

    так, чтобы это можно было легко адаптировать под .tap
    хотя хз как это сделать D
    а длину файла можно брать из дескриптора файла....
    потому что хардкодить длину всех файлов мне не хочется
    хочется просто по имени грузить, как в бейсике:
    LOAD "game" CODE 32768

  2. #1
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  3. #2
    Veteran
    Регистрация
    01.03.2005
    Адрес
    Новосибирск
    Сообщений
    1,979
    Спасибо Благодарностей отдано 
    69
    Спасибо Благодарностей получено 
    261
    Поблагодарили
    99 сообщений
    Mentioned
    6 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Держи мою процедурку из Диззи редактора

    Для работы процедура использует два буфера. Один длинною в 256 байт используется под нужды парсера, второй содержит переменные
    о параметрах нашего файла. Для работы с драйвером нужно работать со вторым буфером напрямую, итак переменная NAME длнна 9 байт.
    Первые 8 байт - имя файла, последний байт - тип файла. Переменная SYSTEM содержит по смещению +0 адрес загрузки нашего
    файла или адрес откуда будет производиться запись (тип word). По смещению SYSTEM+2 содержится длина нашего файла в байтах,
    эта переменная актуальна для режима записи на диск. Далее по смещению SYSTEM+4 содержится информация о секторе (тип byte)
    и по SYSTEM+5 о положении файла на диске (тип word). Эти переменные используются драйвером для внутренних нужд.
    Код:
    ; TRDOS --------------------------------------------------------------------------------
    INIT:	LD A,(#5D19)	;Считываем номер дисковода из переменных
    	AND #03
    	OR #2C
    	LD (DRIVE1+1),A
    	SET 4,A
    	LD (DRIVE2+1),A
    	RET
    
    LOAD:   SUB A       	; обнуляем регистр A (A=0 - режим загрузки)
            LD HL,адрес_загрузки
            LD (SYSTEM),HL
            CALL LOADER
            OR A
            JR NZ,файл_не_найден
            RET
    
    SAVE:   LD A,#FF	; (A<>0 - режим выгрузки)
            LD HL,адрес_выгрузки
            LD (SYSTEM),HL
            LD HL,длинна_файла
            LD (SYSTEM+2),HL
            CALL LOADER
            OR A
            JR NZ,нет_места_на_диске
            RET
    
    LOADER	DI
    	OR A
    	JR NZ,SAVER
    	SUB A
    LOOP	PUSH AF
    	LD HL,BUF
    	PUSH HL
    	LD E,A
    	SUB A
    	LD D,A
    	INC A
    	LD B,A
    	DEC A
    	CALL DRIVER
    	LD B,16
    	POP HL
    CHECK	PUSH BC
    	LD B,9
    	LD DE,NAME
    CHECK1	LD A,(DE)
    	CP (HL)
    	JR NZ,CHECK2
    	INC HL
    	INC DE
    	DJNZ CHECK1
    	POP BC
    	POP AF
    	INC HL
    	INC HL
    	LD E,(HL)
    	INC HL
    	LD D,(HL)
    	PUSH DE
    	INC HL
    	LD B,(HL)
    	INC HL
    	LD E,(HL)
    	INC HL
    	LD D,(HL)
    	DEC B
    	JR NZ,CHECK3
    	LD HL,BUF
    	PUSH HL
    	INC B
    	SUB A
    	CALL DRIVER
    	POP HL
    	LD DE,(SYSTEM)
    	POP BC
    	JR CHECK4
    CHECK3	PUSH BC
    	LD HL,(SYSTEM)
    	SUB A
    	CALL DRIVER
    	PUSH HL
    	INC B
    	LD HL,BUF
    	SUB A
    	CALL DRIVER
    	POP DE
    	POP BC
    	LD C,0
    	POP HL
    	OR A
    	SBC HL,BC
    	LD B,H
    	LD C,L
    	LD HL,BUF
    CHECK4	LDIR
    	SUB A
    	RET
    CHECK2	LD A,B
    	ADD A,7
    	LD C,A
    	LD B,0
    	ADD HL,BC
    	POP BC
    	DJNZ CHECK
    	POP AF
    	INC A
    	CP 8
    	JR NZ,LOOP
    	RET
    
    SAVER	LD HL,BUF
    	LD E,8
    	SUB A
    	LD B,A
    	LD D,B
    	INC B
    	CALL DRIVER
    	LD A,(BUF+228)
    	LD C,A
    	CP 128
    	RET NC
    	LD DE,(SYSTEM+2)
    	DEC DE
    	INC D
    	LD B,D
    	LD A,B
    	LD E,B
    	LD D,0
    	LD HL,(BUF+229)
    	LD (SYSTEM+4),A
    	OR A
    	SBC HL,DE
    	LD A,H
    	CP #FF
    	RET Z
    	LD A,C
    	OR A
    	EX AF,AF'
    	LD (BUF+229),HL
    	LD A,(BUF+228)
    	INC A
    	LD (BUF+228),A
    	LD DE,(SYSTEM)
    	LD HL,(BUF+225)
    	LD (SYSTEM+5),HL
    	EX DE,HL
    	CALL DRIVER
    	LD (BUF+225),DE
    	SUB A
    	INC A
    	LD B,A
    	LD HL,BUF
    	LD DE,8
    	CALL DRIVER
    	LD E,0
    	LD HL,BUF
    	LD BC,2048
    
    SLD3	EX AF,AF'
    	JR Z,SOHRAN
    	DEC A
    	EX AF,AF'
    	LD A,L
    	ADD A,#10
    	LD L,A
    	JR NZ,SLD4
    	INC E
    SLD4	DEC BC
    	LD A,B
    	OR C
    	JR NZ,SLD3
    SOHRAN	LD D,0
    	PUSH DE
    	PUSH HL
    	LD HL,BUF
    	SUB A
    	LD B,A
    	INC B
    	CALL DRIVER
    	POP DE
    	LD HL,NAME
    	LD BC,16
    	LDIR
    	POP DE
    	LD HL,BUF
    	SUB A
    	INC A
    	LD B,A
    	CALL DRIVER
    	SUB A
    	RET
    
    DRIVER  PUSH BC
            PUSH HL
            INC E
            OR A
            LD A,#A0
            LD HL,#3FCA
            JR NZ,TR_DOS1
            LD A,#80
            LD HL,#3FE5
    TR_DOS1 LD (TR_DOS0+2),HL
            LD (TR_DOS3+1),A
    TR_DOS5 CALL TRECK
            LD IX,#2F59
            CALL TR_DOS
            LD B,4
    WAIT    CALL #3DFD
            DJNZ WAIT
    TR_DOS4 BIT 6,B
            JR NZ,TR_DOS5
            POP HL
            POP BC
    NEXT    PUSH BC
            PUSH HL
            LD C,#5F
            LD A,E
            CALL PORT
            LD C,#7F
    TR_DOS3 LD A,0
            CALL TRRDOS
    TR_DOS0 LD IX,0
            CALL TR_DOS
            PUSH DE
            SUB A
            LD C,#3F
            CALL PORT
            LD A,#A
            LD C,#5F
            CALL PORT
            LD D,1
            LD IX,#3F33
            CALL TR_DOS
            POP DE
            LD A,D
            SRL A
            LD C,#3F
            CALL PORT
            SUB A
            OR B
            JR NZ,TR_DOS4
            POP HL
            INC H
            POP BC
            INC E
            LD  A,E
            CP #11
            CALL Z,TRECK-3
            DJNZ NEXT
            DEC E
            RET
            LD E,1
            INC D
    TRECK   LD A,D
            SRL A
            LD C,#7F
            CALL PORT
    DRIVE1  LD A,#2C
            JR C,TRECK0
    DRIVE2  LD A,#3C
    TRECK0  LD C,#FF
            CALL PORT
            LD A,#1C
    TRRDOS  LD IX,#2FC3
    TR_DOS  PUSH IX
            JP #3D2F
    PORT    LD IX,#2A53
            JR TR_DOS
    
    NAME    DEFB "********C"
    SYSTEM  DEFW #C000      ; START
            DEFW 0          ; LENGHT
            DEFB 0          ; SECTORS
            DEFW 0          ; TRK/SEC
            ORG #5B00
    BUF     DEFS 256        ; BUFFER
    Последний раз редактировалось drbars; 01.03.2017 в 04:58.

  4. #3
    Guru Аватар для Sayman
    Регистрация
    16.02.2006
    Адрес
    Новосибирск
    Сообщений
    3,277
    Спасибо Благодарностей отдано 
    17
    Спасибо Благодарностей получено 
    91
    Поблагодарили
    54 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    drbars, делать сегодня всякие турболоадеры это зло. нельзя было 3d13 использовать?
    0A заповедей:
    I. Не удаляй каталог свой.
    II. Не удаляй до времени ни одного файла.
    III. Не кради файлы.
    IV. Не желай программы ближнего своего.
    V. Почитай BDOS и BIOS как родителей своих ...
    ---
    Sprinter resurrect:
    Telegram
    Discord
    Repo
    Forum

  5. #4
    Master Аватар для SaNchez
    Регистрация
    22.12.2007
    Адрес
    г. Владивосток
    Сообщений
    915
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    12
    Поблагодарили
    6 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Код:
    ;загрузка файла
    ;вх  - de - адрес загрузки
    ;      hl - указатель на имя файла
    				
    load_file  push de
               ld c,#13
               call #3d13
               pop hl
               xor a
               ld (#5cf9),a
               cpl
               ld c,#0e
               jp #3d13
    Ошибки не обрабатываются.
    Последний раз редактировалось SaNchez; 01.03.2017 в 06:05.

  6. #5
    Veteran
    Регистрация
    01.03.2005
    Адрес
    Новосибирск
    Сообщений
    1,979
    Спасибо Благодарностей отдано 
    69
    Спасибо Благодарностей получено 
    261
    Поблагодарили
    99 сообщений
    Mentioned
    6 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Sayman Посмотреть сообщение
    drbars, делать сегодня всякие турболоадеры это зло. нельзя было 3d13 использовать?
    Нет Это полностью автономная поцедура. Ошибки кстати зацикливает в бесконечный Retry, не зависает.

  7. #6
    Guru Аватар для Sayman
    Регистрация
    16.02.2006
    Адрес
    Новосибирск
    Сообщений
    3,277
    Спасибо Благодарностей отдано 
    17
    Спасибо Благодарностей получено 
    91
    Поблагодарили
    54 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Это полностью автономная поцедура
    Каким образом это полностью автономная процедура, если лезет в область ПЗУ трдос для работы с портами ВГ93?
    на дворе 2017год. 3d13 использовать выгоднее, т.к. на большинстве сегодняшних машин можно вгонять образ на рам диск и гонять от туда (а то и сразу с винта/sd карты), а своим турболоадером ты во1х, на этом поставил крест, а во2х, снижаешь возможность и шанс портирования продукта на другие платформы/системы, отличные от "трдосной". в общем и целом, турболоадер на сегодня это одно слово - понты.
    0A заповедей:
    I. Не удаляй каталог свой.
    II. Не удаляй до времени ни одного файла.
    III. Не кради файлы.
    IV. Не желай программы ближнего своего.
    V. Почитай BDOS и BIOS как родителей своих ...
    ---
    Sprinter resurrect:
    Telegram
    Discord
    Repo
    Forum

  8. #7
    Guru Аватар для Shiny
    Регистрация
    19.01.2017
    Адрес
    г. Арзамас
    Сообщений
    2,130
    Записей в дневнике
    38
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    33
    Поблагодарили
    20 сообщений
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Sayman Посмотреть сообщение
    в общем и целом, турболоадер на сегодня это одно слово - понты
    Помнится, что в древних релизах игр защита засирала всю память, так что турболоадер уместен. Другое дело - эмуляторы плохо эмулируют такое обращение с ВГ93, например Spectaculator.

  9. #8
    Guru Аватар для Sayman
    Регистрация
    16.02.2006
    Адрес
    Новосибирск
    Сообщений
    3,277
    Спасибо Благодарностей отдано 
    17
    Спасибо Благодарностей получено 
    91
    Поблагодарили
    54 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Помнится, что в древних релизах игр защита засирала всю память,
    вот именно, в древних релизах. тогда это было уместно. а сегодня уже нет. и игры те старые (многие) давно перерелижены (перерелизены, как правильно? ).
    тем более там речь не про древний релиз была, а про современный.
    Последний раз редактировалось Sayman; 01.03.2017 в 10:04.
    0A заповедей:
    I. Не удаляй каталог свой.
    II. Не удаляй до времени ни одного файла.
    III. Не кради файлы.
    IV. Не желай программы ближнего своего.
    V. Почитай BDOS и BIOS как родителей своих ...
    ---
    Sprinter resurrect:
    Telegram
    Discord
    Repo
    Forum

  10. #9
    Guru Аватар для Shiny
    Регистрация
    19.01.2017
    Адрес
    г. Арзамас
    Сообщений
    2,130
    Записей в дневнике
    38
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    33
    Поблагодарили
    20 сообщений
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Sayman Посмотреть сообщение
    вот именно, в древних релизах. тогда это было уместно. а сегодня уже нет.
    в любом случае отказываться от треклоадера неумно. Как вариант, использовать стандартную точку входа TR-DOS.

  11. #10
    Guru Аватар для Sayman
    Регистрация
    16.02.2006
    Адрес
    Новосибирск
    Сообщений
    3,277
    Спасибо Благодарностей отдано 
    17
    Спасибо Благодарностей получено 
    91
    Поблагодарили
    54 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Шынни, вот объясни мне. новый проект, под трдос. запускается с трдос диска. формат диска стандартный, без всяких защит. Зачем делать "трекосекторный" лоадер для файлов, если с этим легко можно справляться через 3d13 (стандартная точка входа в трдос). при этом явные преимущества - можно грузить с образа, а не с реальной дискеты (исключение только ТС конфа, где не ведомым мне способом турболоадеры работают); возможность легко перетащить проект под другие платформы (и расширить аудиторию); компактный код - появляется место для прочих важных процедур (компактность кода SaNchez примерно в 10 раз, чем у dr.bars, а задачи те же самые - загрузить файл).
    0A заповедей:
    I. Не удаляй каталог свой.
    II. Не удаляй до времени ни одного файла.
    III. Не кради файлы.
    IV. Не желай программы ближнего своего.
    V. Почитай BDOS и BIOS как родителей своих ...
    ---
    Sprinter resurrect:
    Telegram
    Discord
    Repo
    Forum

Страница 1 из 2 12 ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Загрузка файла в TR-DOS (Ассемблер) не получается
    от IanPo в разделе Программирование
    Ответов: 5
    Последнее: 01.02.2011, 19:54
  2. AY Emul имени С. Бульбы
    от fk0 в разделе Музыка
    Ответов: 8
    Последнее: 25.10.2005, 10:46

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •