nedoPC.org

Electronics hobbyists community established in 2002
Atom Feed | View unanswered posts | View active topics It is currently 28 Mar 2024 11:09



Reply to topic  [ 22 posts ]  Go to page 1, 2  Next
Акселератор 
Author Message
God
User avatar

Joined: 29 Dec 2003 01:00
Posts: 1101
Location: Москва
Reply with quote
Quote:
LD B, B - Switch the Accelerator off.

LD D, D - Switch the Accelerator in the mode of load a byte of block size.
Next command is "LD A, dat" where "dat" is a new block size.

LD C, C - Switch the Accelerator to filling by one byte mode for horizontal line.
Next command "LD (HL), A" will fill all bytes by value of A.

LD E, E - Switch the Accelerator to filling by one byte mode for vertical line.

LD H, H - Reserved.

LD L, L - Switch the Accelerator to copying a data block mode for horizontal line of the screen.
Next command "LD A, (HL)" will fill the Accelerator memory by value of (HL).
And the command "LD (DE), A" will copy the data from the Accelerator memory to RAM or to VideoRAM.

LD A, A - Switch the Accelerator to copying a data block mode for vertical line of the screen.


Люди кто нить проверял работу оного?
Короче у меня функции OR и AND работает, а вот XOR не работает....
Видеопамять в первом окне (#4000-#7FFF), прога во втором (#8000-#BFFF).
Фрагмент следующий:
DI
LD l,l
LD a,(de)
XOR (hl)
LD (hl),a
LD b,b
EI
причем HL и DE адреса в видеопамяти.
OR и AND работают, а XOR работает как OR :-(


28 Jan 2004 00:03
Profile ICQ WWW
Retired

Joined: 03 Aug 2003 22:37
Posts: 1474
Location: Moscow
Reply with quote
Второй день забываю проверить :( Может быть стоит каждую инструкцию акселератора завершать кодом его отключения ?


30 Jan 2004 03:35
Profile
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22411
Location: Silicon Valley
Reply with quote
Mac Buster wrote:
Второй день забываю проверить :( Может быть стоит каждую инструкцию акселератора завершать кодом его отключения ?


Похоже, что именно так и надо делать - включил акселератор, выполнил 1 команду, выключил - и т.д. Иначе он работает не так, как ожидалось или вообще не работает (на реальной железяке).

_________________
:dj: https://mastodon.social/@Shaos


02 Feb 2004 13:11
Profile WWW
God
User avatar

Joined: 29 Dec 2003 01:00
Posts: 1101
Location: Москва
Reply with quote
Quote:
Похоже, что именно так и надо делать - включил акселератор, выполнил 1 команду, выключил - и т.д. Иначе он работает не так, как ожидалось или вообще не работает (на реальной железяке).


Я покрутил по всякому XOR чтото у меня не получился, ну ладно. Впринципе OR и AND вполне достаточно :-)


02 Feb 2004 23:24
Profile ICQ WWW
Novelist

Joined: 10 Feb 2011 07:04
Posts: 35
Location: 92.112.8.125
Reply with quote
Post 
Shaos wrote:
Hard wrote:
Искал причину почему не работает flc-плейер на моем эмуле, нашел. Плейер заработал. Но, эта причина мешает работать плейеру и на твоем эмуляторе - инициализацию акселя я подсматривал в твоих исходниках. в плейере такая конструкция имеет место быть:
Code:
ld a,#80
ld d,d
ld (de),a
ld b,b

Т.е. тут идет изменение размера буфера посредством операции записи, а эмулятор ожидает только операцию чтения.


непонял - давай поподробнее в форуме

можно новый топик создать или в конец вот этого написать: http://www.nedopc.org/forum/viewtopic.php?t=7390


Код из flicplay.exe:
Code:
      ...
#86a5: ld a,c  ;размер буфера в аккуме
      ld d,d       ;команда определения размера буфера
      ld (de),a   ;передаем в аксель
      ld b,b       ;выключаем аксель
      ...

Тут мы устанавливаем размер буфера записью значения аккумулятора в (DE), операция записи.
кусок из сырка sprint, отработка команды акселя по установке размера буфера:
Code:
 case 1: // LD D,D - set size of accelerator buffer
  if(a=='R')
  { AccelSize = b;
    if(AccelSize==0) AccelSize=256;
  }     
  break;

Тут видно, что сия конструкция реагирует лишь на чтение, т.е. на команды типа LD A,X;LD A,(DE) и пр. Другими словами твой эмулятор проигнорирует команду установки буфера, оставит его равным 256 байт, и соответственно в программах, с подобным способом инициализации акселя полезут глюки. Я могу назвать по крайней мере 2 таких программы: flicplay и gfxview.


17 Apr 2012 12:03
Profile
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22411
Location: Silicon Valley
Reply with quote
Post 
Hard wrote:
Код из flicplay.exe:
Code:
      ...
#86a5: ld a,c  ;размер буфера в аккуме
      ld d,d       ;команда определения размера буфера
      ld (de),a   ;передаем в аксель
      ld b,b       ;выключаем аксель
      ...

Тут мы устанавливаем размер буфера записью значения аккумулятора в (DE), операция записи.
кусок из сырка sprint, отработка команды акселя по установке размера буфера:
Code:
 case 1: // LD D,D - set size of accelerator buffer
  if(a=='R')
  { AccelSize = b;
    if(AccelSize==0) AccelSize=256;
  }     
  break;

Тут видно, что сия конструкция реагирует лишь на чтение, т.е. на команды типа LD A,X;LD A,(DE) и пр. Другими словами твой эмулятор проигнорирует команду установки буфера, оставит его равным 256 байт, и соответственно в программах, с подобным способом инициализации акселя полезут глюки. Я могу назвать по крайней мере 2 таких программы: flicplay и gfxview.


я боюсь, что это опечатка в самом flicplay - после ld d,d должна отрабатывать только ld a,# и ничего больше...

_________________
:dj: https://mastodon.social/@Shaos


17 Apr 2012 12:18
Profile WWW
Novelist

Joined: 10 Feb 2011 07:04
Posts: 35
Location: 92.112.8.125
Reply with quote
Post 
Shaos wrote:
я боюсь, что это опечатка в самом flicplay - после ld d,d должна отрабатывать только ld a,# и ничего больше...

Не думаю. Т.к. до исправления сего глюка у меня не работал как flicplayer (вылетал с матерными словами, либо ресетил "машину"), так и gfxview (копирование в буфер фона под окнами глючило), после исправления - все заработало как на реале. В твоем эмуляторе указанный софт глючит так же как и у меня ранее.


17 Apr 2012 13:13
Profile
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22411
Location: Silicon Valley
Reply with quote
Post 
Hard wrote:
Shaos wrote:
я боюсь, что это опечатка в самом flicplay - после ld d,d должна отрабатывать только ld a,# и ничего больше...

Не думаю. Т.к. до исправления сего глюка у меня не работал как flicplayer (вылетал с матерными словами, либо ресетил "машину"), так и gfxview (копирование в буфер фона под окнами глючило), после исправления - все заработало как на реале. В твоем эмуляторе указанный софт глючит так же как и у меня ранее.


ну значит это недокументированная фича ;)

P.S. чую я придётся хардверные сырцы акселя ковырять чтобы истину найти :)

_________________
:dj: https://mastodon.social/@Shaos


17 Apr 2012 13:34
Profile WWW
Maniac

Joined: 05 Oct 2009 19:44
Posts: 223
Location: 212.164.105.5
Reply with quote
Post 
набросал ещё один тест и вот вам первая ошибка в работе спринта. Hard, тебе тоже проверить надо на своём эмуле.
суть такова - я взял тест ldee.exe и изменил в нём размер буфера и размер блока с 256 байт до 16 байт. предполагалось, что проверка сможет показать работу акселя совместно с портом "У". на реале если не делать отслеживание порта "У", получаются дыры каждые 16 байт начиная с нуля. размер дыр - 16 байт. этот же тест в эмуляторе спринт делает заполнение вертикали полностью. без быр. на реале чтобы достич этого же эффекта мне пришлось читать порт_у и вычитать 16. только тогда получил полную вертикаль!

http://www.nedopc.org/nedopc/sprinter/upload/ldeen_1.zip

как обычно - ногами не пенать, просьба к Александру прикрепить архивчик к посту (но лучше эту кнопку в форум добавить).

p.s. прошу обратить внимание на то, что я намеренно не использую отключение работы акселя между режимами/операциями. если на реале это работает, значит должно работать у всех. однако, если в процессе эксперемента (теста) всё таки без отключения не обойтись, я его приминяю.


17 Apr 2012 19:46
Profile
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22411
Location: Silicon Valley
Reply with quote
Post 
Sayman wrote:
набросал ещё один тест и вот вам первая ошибка в работе спринта. Hard, тебе тоже проверить надо на своём эмуле.
суть такова - я взял тест ldee.exe и изменил в нём размер буфера и размер блока с 256 байт до 16 байт. предполагалось, что проверка сможет показать работу акселя совместно с портом "У". на реале если не делать отслеживание порта "У", получаются дыры каждые 16 байт начиная с нуля. размер дыр - 16 байт. этот же тест в эмуляторе спринт делает заполнение вертикали полностью. без быр. на реале чтобы достич этого же эффекта мне пришлось читать порт_у и вычитать 16. только тогда получил полную вертикаль!


Code:
lp1:            di
                ld d,d
                ld a,16
                ld e,e
                ld a,(hl)
                ld (de),a
                ld b,b
                ei
                djnz lp1
                ld c,waitkey
                rst 10h
                jp _exit


ну в-принципе логично - ld a,(hl) сдвигает на 16 и потом ld (de),a сдвигает ещё на 16 - по идее спринт должен делать абсолютно тоже самое:

Code:
case 6: // LD A,A - copy in video
  switch(a)
  {
   case 'R': 
    for(i=0;i<AccelSize;i++)
    {   
        AccelRAM[i] = readbyte(adr);
        VideoY = 0xFF&(VideoY+1);
    }
    break;
   case 'W': 
    for(i=0;i<AccelSize;i++)
    {   
        writebyte(adr,AccelRAM[i]);
        VideoY = 0xFF&(VideoY+1);
    }
    break;
  ....


P.S. у меня в эмуле LDEEN1.EXE вообще ничего не делает...

_________________
:dj: https://mastodon.social/@Shaos


17 Apr 2012 20:28
Profile WWW
Maniac

Joined: 05 Oct 2009 19:44
Posts: 223
Location: 212.164.105.5
Reply with quote
Post 
я думаю что вот так будет чуть более заметно :)
скриншот из эмулятора

скриншот (камрип) с реала

кусок кода
Code:
      ld hl,data
      ld de,screen
      ld c,0
lp2:                          push bc
                               ld b,16      
lp1:      di
      ld d,d
      ld a,16
;                ld b,b
                ld e,e
      ld a,(hl)
      ld (de),a
      ld b,b
      ei
      djnz lp1
                pop bc
                inc de
                dec c
                jp nz,lp2
      ld c,waitkey
      rst 10h
      jp _exit


17 Apr 2012 21:06
Profile
Novelist

Joined: 10 Feb 2011 07:04
Posts: 35
Location: 92.112.8.125
Reply with quote
Post 
Shaos, имеется в виду операция типа LD E,E, (Graph Fill) а не LD A,A (Graph Copy).
У меня тоже полное заполнение, т.к. не предполагал, что эта команда реагирует на чтение, вот интересно что в этот момент происходит с буфером? Saymon, можешь подправить этот тест - после LD A,(HL) включить аксель LD A,A и выкинуть данные из буфера на экран LD (DE),A.

Че-та кусок кода с бинарником не совпадает - в бинарнике нет инкремента адреса DE, сейчас после патчинга у меня идет пунктирная линия по краю экрана...


17 Apr 2012 21:11
Profile
Maniac

Joined: 05 Oct 2009 19:44
Posts: 223
Location: 212.164.105.5
Reply with quote
Post 
http://rghost.ru/37641069


17 Apr 2012 22:44
Profile
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22411
Location: Silicon Valley
Reply with quote
Post 
Hard wrote:
Shaos wrote:
я боюсь, что это опечатка в самом flicplay - после ld d,d должна отрабатывать только ld a,# и ничего больше...

Не думаю. Т.к. до исправления сего глюка у меня не работал как flicplayer (вылетал с матерными словами, либо ресетил "машину"), так и gfxview (копирование в буфер фона под окнами глючило), после исправления - все заработало как на реале. В твоем эмуляторе указанный софт глючит так же как и у меня ранее.


Разобрался в чём дело - мой эмуль до сегодняшнего дня ничего не знал про вторую страницу видеопамяти :oops:
И в плеере фликов палитро хитро-хакерски по смещению в 992 и более пикселов пишется в каждую строчку - замапил это на свою палитру и всё заработало :)
Причём акселератор трогать не пришлось ;)

_________________
:dj: https://mastodon.social/@Shaos


20 May 2013 00:32
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22411
Location: Silicon Valley
Reply with quote
Post 
А вот чего я точно упустил, так это возможность с помощью номера страницы управлять режимами копирования (сквозное и/или с прозрачностью):
Code:
        LD A,50h        ; Use   50h for normal mode
                        ;       54h for "no copy in main shadow RAM" mode
                        ;       58h for "FF is transparent" mode
                        ;       5Ch for "no copy in main shadow RAM" and
                        ;               "FF is transparent" mode
        OUT (PAGE3),A

Только я пока не встретил ни одной программы, которые бы этим пользовались...

_________________
:dj: https://mastodon.social/@Shaos


20 May 2013 20:53
Profile WWW
Display posts from previous:  Sort by  
Reply to topic   [ 22 posts ]  Go to page 1, 2  Next

Who is online

Users browsing this forum: No registered users and 2 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Group
Designed by ST Software.