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

User Tag List

Страница 2 из 2 ПерваяПервая 12
Показано с 11 по 15 из 15

Тема: Чтение файла в tr-dos

  1. #11
    Guru Аватар для jerri
    Регистрация
    01.03.2005
    Адрес
    Samara
    Сообщений
    4,746
    Спасибо Благодарностей отдано 
    256
    Спасибо Благодарностей получено 
    265
    Поблагодарили
    199 сообщений
    Mentioned
    12 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    а стек где? и код где?
    а переменные ДОС инициализированны?
    память до #6100 лучше не трогать
    С уважением,
    Jerri / Red Triangle.

  2. #12
    Activist Аватар для hippiman
    Регистрация
    29.02.2008
    Адрес
    Ростов-на-Дону
    Сообщений
    435
    Записей в дневнике
    27
    Спасибо Благодарностей отдано 
    7
    Спасибо Благодарностей получено 
    42
    Поблагодарили
    19 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    ок
    компилирую для запуска с адреса 24676
    Код:
    unsigned char asm_dat[512];
    unsigned char asm_filename[9];
    unsigned short asm_len;
    static unsigned asm_adres;
    void tr_dos_load (char *filename,char* dest)
    {
    	sprintf(asm_filename,"%s",filename);
    	asm_adres=asm_dat[0];
    	asm_len=0;
    	#asm
    
    	
    
        IM   1
    	.LOAD
    		call 	15649 
    		ld c,0
    		CALL   15635
            CALL   SET_NAMEL   ; готовим сист.
                             ; переменные
           LD     C,10       ; ищем файл
           CALL   15635
           LD     A,C
           BIT    7,C
    	   JR     Z,LD_1
    	   jp ext
           RET
        
    		
    	.LD_1                     ; грузим...
           LD     A,C
           LD     C,8
           CALL   15635
           XOR    A
           LD     (23801),A
           LD     (23824),A
    	   LD	  A,3
    	   LD     HL,(_asm_adres)
           LD     C,14
           CALL   15635
    	   
           JP	ext
    	.SET_NAMEL
         LD     HL,_asm_filename    ; перекидываем
           LD     DE,23773   ; имя файла
           LD     BC,8
           LDIR
           LD     A,67    ; тип файла м.б.
           LD     (23781),A  ; любой, кроме
           LD     A,9        ; поиск файла
           LD     (23814),A  ; по 9 символам
           RET
    	 .ext
    	IM	2
    	
    	#endasm
    	sprintf(dest,"%s",asm_dat);
    	printf("%d",asm_dat[0]);
    	sp_WaitForKey();
    }
    сама функция. Вызов call 15649 , подготавливает переменные. Я правильно понимаю?
    Код:
    #include <stdlib.h>
    #include <stdio.h>
    #include <conio.h>
    #include <sound.h>
    #include <game.h>
    #include <malloc.h>
    extern uchar boxx[];
    extern uchar *lastk;          /* system variable LAST_K */
    #asm
       ._lastk  defw 23560;
    #endasm 
    #pragma output STACKPTR=61439
    struct window mine;     /* Window structure */
    
    
    
    void *my_malloc(uint bytes)
    {
       return sp_BlockAlloc(0);
    }
    void *u_malloc = my_malloc;
    void *u_free = sp_FreeBlock; 
    
    int clock_isr(void)
    {
     ....
     ....
    }
      struct sp_SS *tmp;
      
      uint key_left, key_right, key_up, key_down,key_pause,x,y,lx,ly,a,b,c,kn;
      
      struct figure fg;
      struct game_field fld;
      short sx,sy;
      uchar rotflag;
      uchar kl='o';
      uchar kr='p';
      uchar ku='q';
      uchar kdd='a';
      uchar kp=' ';
    uchar main_menu()
    {
    		uchar buf[32];
    	uchar lvl[512];
    	uchar a,b,c,d,submenu,curspeed,keypressed;
    	uint ka,kb,kc,kd,ke,k1,k2,k3,k4,k5,k6,k7,k8,k9,k0,chkk,chkh;
    	ka = sp_LookupKey('a');
    	kb = sp_LookupKey('b');
    	kc = sp_LookupKey('c');
    	kd = sp_LookupKey('d');
    	ke = sp_LookupKey('e');
    	kn = sp_LookupKey('n');
    	chkk=sp_LookupKey('k');
    	chkh=sp_LookupKey('h');
    	
    	k1 = sp_LookupKey('1');
    	k2 = sp_LookupKey('2');
    	k3 = sp_LookupKey('3');
    	k4 = sp_LookupKey('4');
    	k5 = sp_LookupKey('5');
    	k6 = sp_LookupKey('6');
    	k7 = sp_LookupKey('7');
    	k8 = sp_LookupKey('8');
    	k9 = sp_LookupKey('9');
    	k0 = sp_LookupKey('0');
    	tr_dos_load("level   ",lvl); // этот вызов срабатывает
    
    	sp_Border(BLACK); 
    	ps.bounds = sp_ClipStruct;
    	ps.colour=PAPER_BLACK|INK_WHITE|BRIGHT;
    	ps.colour=PAPER_BLACK|INK_WHITE|BRIGHT;
    	sp_ComputePos(&ps, 7,2);
    	sp_PrintString(&ps, "tetris 2 returns"); 
    	sp_ComputePos(&ps, 10,4);
    	sp_PrintString(&ps, "main menu"); 
    	
    	sp_ComputePos(&ps, 7,10);
    	sp_PrintString(&ps, "a: new game"); 
    	sp_ComputePos(&ps, 7,12);
    	sp_PrintString(&ps, "b: set controll"); 
    	sp_ComputePos(&ps, 7,14);
    	sp_PrintString(&ps, "c: enter password"); 
    	sp_ComputePos(&ps, 7,16);
    	sp_PrintString(&ps, "d: select speed"); 
    	sp_ComputePos(&ps, 7,18);
    	sp_PrintString(&ps, "e: autorepeat"); 
    	if(autorepeat==0)
    	{
    		sp_PrintString(&ps, " false"); 
    	}
    	else
    	{ 
    		sp_PrintString(&ps, " true"); 
    	}
    	c=1;
    	d=0;
    	submenu=0;
    	curspeed=255;
    
    	tr_dos_load("level   ",lvl); // а на этом вызове уже слетает
    	....
            тут уже не работает
            ....
    }
    main()
    {
     
       uchar a,cntr;
       uint kk1;
       
       #asm
       di
       #endasm
       sp_InitIM2(0xf1f1);
       sp_CreateGenericISR(0xf1f1);
       sp_RegisterHookLast(255, clock_isr); 
       #asm
       ei
       #endasm
       time.lspd=8;
       
       sp_Initialize(bgcolor, ' ');
        prepare_tile(&fg);
       //-----------------
    
       unlimited_lives=0;
       autorepeat=1;
       while(1) 
       {
       fld->lives=3;
       fld->cur_level=1;
       main_menu();
    ...
    дальше неинтересно

  3. #13
    Veteran Аватар для ZXMAK
    Регистрация
    30.01.2006
    Адрес
    Харьков
    Сообщений
    1,404
    Спасибо Благодарностей отдано 
    2
    Спасибо Благодарностей получено 
    18
    Поблагодарили
    12 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    может не мучаться, а сделать через функцию чтения сектора?, вычитываешь каталог, ищешь файл, находишь трек/сайд/сектор и читаешь по секторам...
    ZXMAK2 - Виртуальная Машина ZX Spectrum https://github.com/zxmak/ZXMAK2 (старая ссылка http://zxmak2.codeplex.com)
    ZXMAK.NET - спектрум на C# http://sourceforge.net/projects/zxmak-dotnet

  4. #14
    Veteran Аватар для lisica
    Регистрация
    19.12.2008
    Адрес
    Черкассы
    Сообщений
    1,573
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    16
    Поблагодарили
    13 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Друг, ты забыл сохранять перед вызовом доса HL`
    После возврата восстановить.

    ex hl,hl`
    push hl

    call 15635
    pop hl

    ex hl,hl`

    Ну типа того...

    ---------- Post added at 21:15 ---------- Previous post was at 20:53 ----------

    Цитата Сообщение от hippiman Посмотреть сообщение
    сама функция. Вызов call 15649 , подготавливает переменные. Я правильно понимаю?
    Ага, только она один раз вызывается в самом начале( если, конечно не затираешь область сис переменных потом)
    второй раз вызывать её не обязательно.
    Последний раз редактировалось lisica; 27.09.2011 в 22:18.
    Робик 1024(пентагоновские тайминги),+ 7Мц+, 2AY(TS),+ контроллер дисковода,+ 3.5,+ 5.25 флоп,+CMOS,+ mouse(caro),+ Flash.
    Pentagon 128(1991г.)+YМ
    программатор 2732-27512.


  5. #15
    Activist Аватар для hippiman
    Регистрация
    29.02.2008
    Адрес
    Ростов-на-Дону
    Сообщений
    435
    Записей в дневнике
    27
    Спасибо Благодарностей отдано 
    7
    Спасибо Благодарностей получено 
    42
    Поблагодарили
    19 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    дальнейшее изучение показало, что :
    вешается на любом вызове функции 15635
    после вызова функции sp_PrintString из движка spritepack. У меня есть ее исходники, но асм я еще практически совсем не знаю. Выложить их сюда?

    Все! Разобрался. Эта функция меняла данные в IY. Вернул туда 23610 и все заработало.
    Последний раз редактировалось hippiman; 29.09.2011 в 13:55.

Страница 2 из 2 ПерваяПервая 12

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

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

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

Похожие темы

  1. Помогите с расширением файла
    от Rindex в разделе Музыка
    Ответов: 6
    Последнее: 28.10.2009, 10:16
  2. Архивирование wav файла
    от p@lex в разделе Музыка
    Ответов: 4
    Последнее: 09.02.2008, 00:23
  3. Чтение дисков с iS-DOS
    от IDma в разделе Утилиты
    Ответов: 11
    Последнее: 12.02.2006, 08:04

Ваши права

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