User Tag List

Показано с 1 по 10 из 151

Тема: Ретро-ЯП Millfork для Atari, Apple II, ZX Spectrum, MSX, CP/M, NES, Game Boy и MS-DOS

Древовидный режим

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #18

    Регистрация
    11.02.2005
    Адрес
    【RB】
    Сообщений
    3,887
    Спасибо Благодарностей отдано 
    137
    Спасибо Благодарностей получено 
    135
    Поблагодарили
    83 сообщений
    Mentioned
    4 Post(s)
    Tagged
    0 Thread(s)

    Exclamation

    Решил пока отвлечься от скроллов и заняться не менее интересной штукой, как чтение файлов с диска.
    Чисто теоретически опять «ничего сложного», но блин! как же геморно искать по крупицам информацию, её вроде как и вагон в каждой книжке, но где-то одно не дописано, где-то воды много итд.

    Досов на атари как известно много, все они разные и в меру навороченные. Остановится решил на XDOS, как наследнике классической Atari DOS 2.x. Минималистичненько, без всяких меню, чисто командная строка, минимальный размер загрузчика.

    Для сборки готовой дискеты использовал тулзу «dir2atr» из пакета «Atari Tools for Win32»

    Если говорить вкратце, то принцип работы с файлами такой же как и «везде» открываем файл, читаем, закрываем.
    На атари, при открытии нужно указать номер потока*16.

    Для примера сделал что бы с диска читалась картинка в формате ATASCII и выводилась на экран. Экран в DOS обрезан слева на 2 колонки, пришлось картинку подрезать тоже.





    пример простой как 5 копеек

    Выделяем место под буфер
    Читаем, если ошибка (файл не найден), выводим код ошибки
    Если всё успешно выводим посимвольно.

    Код:
    import stdio
    import xdos
    
    const byte channelID = 16*2
    
    array fileName = ["D:DINO.ATA",0x9b]
    const word fileSize = 950
    
    array fileData[fileSize]
    
    void main() {
        word i
        byte status
    
    
        status = openFile(fileName, XDOS_R, channelID)
        if (status == XDOS_OK) {
            readFile(fileData, fileSize, channelID)
            closeFile(channelID)
    
            new_line()
            for i,0,to,fileSize-1 {
                putchar(fileData[i])
            }
        } else {
            putstrz("Open error:"z)
            putword(status)
        }
    }
    Имя файла «прибито», было бы не плохо разобраться с аргументами командной строки, вроде XDOS это позволяет, если я правильно понял.

    Есть ещё нюанс с размером файла. Чисто гипотетически, если задать размер, например 255, а размер файла будет 24 байта, то система прочитает ровно 24 байта, даже если указать 255 в параметрах. Но остаётся вопрос с тем же выводом, как реально понять сколько же фактически было прочитано с диска. Нужно ещё разбираться.

    Но начало уже положено, можно подгружать «уровни» и другую информацию с дискеты на ура
    Вложения Вложения
    • Тип файла: zip DOS.zip (37.3 Кб, Просмотров: 53)
    Последний раз редактировалось breeze; 06.11.2024 в 12:54.

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

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

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

Похожие темы

  1. Ответов: 11
    Последнее: 08.12.2023, 17:18
  2. Bad Apple для MSX/MSX2
    от Pyhesty в разделе MSX
    Ответов: 4
    Последнее: 31.05.2021, 21:45
  3. Перенос игр с Game Boy на ZX Spectrum
    от CityAceE в разделе Программирование
    Ответов: 104
    Последнее: 14.02.2019, 10:56
  4. Game Boy Advance
    от megabyte в разделе Nintendo
    Ответов: 8
    Последнее: 22.05.2006, 14:48
  5. Game Boy Advance в Питере.
    от Surfin_Bird в разделе Nintendo
    Ответов: 10
    Последнее: 21.08.2005, 09:50

Ваши права

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